我正在使用此正则表达式字符串:
/rfi .*?(.*) .*?\((.*)\)/i
第1组找到rfi号,第2组返回()内的内容。 使用测试字符串:“ 新RFI 087(播种机处的混凝土梁)”,一切正常, 但使用测试字符串“ 新RFI 087(在Planter的混凝土(梁))”时,则崩溃。
反正在()内部进行搜索,但忽略其中的多个()吗?
答案 0 :(得分:2)
您可以通过使组1模式变得懒惰来匹配字符串。另外,第一个.*?
是多余的,请将其删除。
使用
/rfi (.*?) .*?\((.*)\)/i
请参见regex demo
@sln建议使用带有子例程的正则表达式,但是这些功能在正则表达式引擎中并不流行,例如Ruby Onigmo或PCRE支持它们。
/rfi (.*?) .*?(\((?:[^()]++|(?2))*\))/i
或者更多的“跨库”(因为Onigmo支持\g<X>
递归构造,与PCRE相同)
/rfi (.*?) .*?(\((?:[^()]++|\g<2>)*\))/i
请参见this demo。