使用此输入:
foo XYZ
to-ignore(bar XYZ)
我需要匹配:
foo XYZ
bar XYZ
此模式:
(.*? XYZ)
给了我不必要的to-ignore(
部分。
我也管理过这样的事情:
[^|\(](.*? XYZ)
我希望[^|\(]
选择字符串或方括号的开头,但是不起作用。有什么想法吗?
答案 0 :(得分:2)
在javascript中:
'foo XYZ\nto-ignore(bar XYZ)'.match(/[^\(]+? XYZ/g)
诀窍是不要在比赛中加入左括号
答案 1 :(得分:1)
这似乎在Java中有效。
String regex = "(.*)?(foo|bar) XYZ\\)?";
System.out.println("foo XYZ".matches(regex));
System.out.println("to-ignore(bar XYZ)".matches(regex));
答案 2 :(得分:1)
此正则表达式应该有效:((^[^(]+ )|(?<=\().* )XYZ
但是:您必须使用多行标记m
,并且它使用了不被普遍支持的正向超前行
Here's what it looks like在regexr.com上并提供了一些示例
答案 3 :(得分:1)
尝试以下代码,它使用(?!)忽略括号之前的所有内容(包括括号本身),并使用(。+?)选择XYZ之前的所有内容:
/(?!.*\()(.+?)XYZ/g