使用此输入:
foo XYZ
to-ignore(bar XYZ)
我需要匹配:
foo XYZ
bar XYZ
此模式:(.*? XYZ)
给了我不需要to-ignore(
部分。
我也管理了这样的事情:[^|(](.*? XYZ)
我希望[^|(]
选择字符串或括号的开头,但它不起作用。有什么想法吗?
在 JavaScript 中:
'foo XYZnto-ignore(bar XYZ)'.match(/[^(]+? XYZ/g)
诀窍是不要将左括号包含在匹配中
这似乎适用于Java。
String regex = "(.*)?(foo|bar) XYZ\)?";
System.out.println("foo XYZ".matches(regex));
System.out.println("to-ignore(bar XYZ)".matches(regex));
试试这段代码,它使用 (?!( 忽略括号前的所有内容,包括括号本身,以及 (.+?( 选择 XYZ 之前的所有内容:
/(?!.*()(.+?)XYZ/g
这个正则表达式应该可以工作:((^[^(]+ )|(?<=().* )XYZ
但是:您必须使用多行标志m
并且它使用积极的前瞻,这并不普遍支持
以下是它在 regexr.com 上的外观,并提供一些示例