Notepad ++使用正则表达式搜索超过30个字符的字符串,并忽略句点(如果有)

时间:2015-12-18 20:46:47

标签: regex

我是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之后,所以这是我必须检查的唯一名称。

任何帮助将不胜感激。

谢谢,

3 个答案:

答案 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次或更多次。

Notepad regex reference

答案 2 :(得分:0)

使用\w(字母字符,包括下划线)来匹配您的姓名:

ADD CONSTRAINT.*\w{31,}$

会找到你寻找的所有热门歌曲。我添加了$,以防你的模式名称长于30个字符。