我使用这个regex字符串:
/rfi .*?(.*) .*?\((.*)\)/i
组1查找rfi编号& Group 2返回( )中的内容。用测试线:“新RFI 087 (播种机的混凝土梁)”一切正常工作,但测试字符串“新RFI 087 (混凝土(梁)在播种机)”它崩溃。
是否可以在()内搜索,但忽略其中的multiple ()?
发布于 2018-11-14 20:40:52
您可以通过使您的组1模式懒惰来匹配您的字符串。另外,第一个.*?是多余的,删除它。
.*?
使用
/rfi (.*?) .*?\((.*)\)/i
见regex演示
@sln建议使用带有子程序的regex,但这些特性在regex引擎中并不十分流行,例如Ruby或PCRE支持它们。
/rfi (.*?) .*?(\((?:[^()]++|(?2))*\))/i
或者更多的“交叉库”(因为Onigmo支持\g<X>递归构造,与PCRE一样)
\g<X>
/rfi (.*?) .*?(\((?:[^()]++|\g<2>)*\))/i
见这个演示。
https://stackoverflow.com/questions/53308134
相似问题