正则表达式匹配所有内容,但保留一些指定的匹配

时间:2015-03-10 12:41:07

标签: regex

我有一个如下字符串:

(GDRO WHERE PERIOD MONTH = 0 AND PERIOD QUARTER = 12) WHERE NDRO() AND KST

我编写了以下正则表达式,它省略了数字,符号和函数,只匹配单词。

/(?![A-Za-z]+\(\))([A-Za-z_](?:\d*))+/g

如果应用于上面的字符串,则结果为

GDRO, WHERE, PERIOD, MONTH, AND, PERIOD, QUARTER, WHERE, AND, KST

我还想要的是让我的正则表达式省略特定的词,即

(WHERE|PERIOD|MONTH|AND|WHERE)

有什么方法可以在我的正则表达式中指定这个,省略这些给定的单词并匹配其他所有单词,即得到以下结果?

GDRO, KST

2 个答案:

答案 0 :(得分:1)

\b(?!(?:WHERE|PERIOD|MONTH|AND|WHERE)\b)(?![A-Za-z]+\(\))([A-Za-z_](?:\d*))+\b

试试这个。看看演示。

https://regex101.com/r/iS6jF6/1

答案 1 :(得分:1)

是的,只需添加WHEREPERIODMONTHANDWHERE,即可更新您的否定前瞻。正则表达式:

/(?:(?![A-Za-z]+\(\)|WHERE|PERIOD|MONTH|AND|WHERE))(\b(?:[A-Za-z_](?:\d*))+\b)/g

测试用例匹配:

MATCH 1
1.  [0-4]   `GDRO`
MATCH 2
1.  [39-46] `QUARTER`
MATCH 3
1.  [70-73] `KST`

Regex demo.