我是Oracle DBA,需要帮助才能使用Notepad ++进行搜索。这是要求。我有一个通过Erwin生成的巨大DDL脚本。我想知道任何约束名称是否超过30个字符。问题是,有时Erwin会将模式名称和表名称附加到约束名称。在搜索超过30个字符的约束名称时,我必须忽略这些。
示例:
ALTER TABLE ABC_REPORTING.T_ABCDE_INSPTN_INVESN_SUM_HIST
ADD CONSTRAINT PK_T_ABCDE_INSPTN_INVSN_SUM_HIST
PRIMARY KEY (COL_INSPTN, COL_SEQ_HIST);
我必须搜索约束名PK_T_ABCDE_INSPTN_INVSN_SUM_HIST
超过30个字符的所有字符串。
如果约束名为ABC.DEF.PK_T_ABCDE_INSPTN_INVSN_SUM_HIST
,那么我必须忽略ABC.DEF
。
如果约束名称为ABC.PK_T_ABCDE_INSPTN_INVSN_SUM_HIST
,那么我必须忽略ABC
..
约束名称总是在ADD CONSTRAINT
之后,所以这是我必须检查的唯一名称。
任何帮助将不胜感激。
谢谢,
答案 0 :(得分:0)
这将做你想要的事情
([A-Z_](?!\.)){30,}
它与.
不匹配,但如果你有一个非常长的架构或表名(也就是30多个字符),它们也会匹配,减去它们的最后一个字符。
这个正则表达式的作用是查找“任何字符(A-Z大写字母或下划线),后面没有字面值”30次或更多次。
答案 1 :(得分:0)
你需要的正则表达式是:
ADD CONSTRAINT \s*(.+\.)*([^\.\s]{30,})
在''之间是要解释的正则表达式的一部分:
' ADD CONSTRAINT
'找到确切的单词。
' \s*
'跟随空白,可以出现零次或多次。
' (.+\.)*
'跟随最后带点的任何字符,该组可以出现零次或多次。这是为了忽略ABC。和ABC.DEF ABC.BCE.XXX等等。
' ([^\.\s]{30,})
'最后任何不同于点或空白的字符,30次或更多次。
答案 2 :(得分:0)
使用\w
(字母字符,包括下划线)来匹配您的姓名:
ADD CONSTRAINT.*\w{31,}$
会找到你寻找的所有热门歌曲。我添加了$
,以防你的模式名称长于30个字符。