正则表达式 - 除了括号内的任何内容
Regex - everything but anything within parenthesis
假设有:
fieldA=20 and (fieldB=date() and (fieldC=35 and fieldD=40)) and fieldE = 100
我正在尝试替换 "and" 字词,一些东西:
fieldA=20 zzz (fieldB=date() and (fieldC=35 and fieldD=40)) zzz fieldE = 100
我已经尝试了几个小时,但没有成功。我可以找到一些关于如何将所有内容 inside 放在圆括号或方括号中的答案。下面的表达式将所有内容都放在括号内,但我实际上不知道如何编写一个忽略它的表达式:
\(([^()]*+|(?R))*\) # retrieves "(fieldB=date() and (fieldC=35 and fieldD=40))"
如有任何帮助,我们将不胜感激。
试试这个模式:
/^(.*?)(?:and)(.*)(?:and)(.*)$/
并替换为:
zzz zzz
Online Demo
您的 \(([^()]*+|(?R))*\)
模式包含一个完整的模式递归构造 (?R)
允许匹配嵌套的括号和其中的所有内容。您需要做的是省略与此子模式匹配的所有内容,并将 and
作为那些之外的整个单词进行匹配。我们需要将整个子模式放入一个捕获组中,并将 (?R)
替换为 (?1)
以仅递归第一个捕获组模式,而不是整个模式。
(*SKIP)(?!)
构造可用于在 PCRE 正则表达式中省略当前匹配的替代项。
因此,使用
(\(([^()]*+|(?1))*\))(*SKIP)(?!)|\band\b
简而言之,
(\(([^()]*+|(?1))*\))(*SKIP)(?!)
- 将嵌套的括号与里面的所有内容匹配,省略匹配的文本并继续分析字符串
|
- 或者...
\band\b
- 匹配 return 整个单词 and
假设有:
fieldA=20 and (fieldB=date() and (fieldC=35 and fieldD=40)) and fieldE = 100
我正在尝试替换 "and" 字词,一些东西:
fieldA=20 zzz (fieldB=date() and (fieldC=35 and fieldD=40)) zzz fieldE = 100
我已经尝试了几个小时,但没有成功。我可以找到一些关于如何将所有内容 inside 放在圆括号或方括号中的答案。下面的表达式将所有内容都放在括号内,但我实际上不知道如何编写一个忽略它的表达式:
\(([^()]*+|(?R))*\) # retrieves "(fieldB=date() and (fieldC=35 and fieldD=40))"
如有任何帮助,我们将不胜感激。
试试这个模式:
/^(.*?)(?:and)(.*)(?:and)(.*)$/
并替换为:
zzz zzz
Online Demo
您的 \(([^()]*+|(?R))*\)
模式包含一个完整的模式递归构造 (?R)
允许匹配嵌套的括号和其中的所有内容。您需要做的是省略与此子模式匹配的所有内容,并将 and
作为那些之外的整个单词进行匹配。我们需要将整个子模式放入一个捕获组中,并将 (?R)
替换为 (?1)
以仅递归第一个捕获组模式,而不是整个模式。
(*SKIP)(?!)
构造可用于在 PCRE 正则表达式中省略当前匹配的替代项。
因此,使用
(\(([^()]*+|(?1))*\))(*SKIP)(?!)|\band\b
简而言之,
(\(([^()]*+|(?1))*\))(*SKIP)(?!)
- 将嵌套的括号与里面的所有内容匹配,省略匹配的文本并继续分析字符串|
- 或者...\band\b
- 匹配 return 整个单词and