匹配括号内的句子(如果存在)

时间:2019-12-11 15:31:59

标签: regex

使用此输入:

foo XYZ
to-ignore(bar XYZ)

我需要匹配:

foo XYZ
bar XYZ

此模式: (.*? XYZ)

给了我不必要的to-ignore(部分。

我也管理过这样的事情: [^|\(](.*? XYZ)

我希望[^|\(]选择字符串或方括号的开头,但是不起作用。有什么想法吗?

4 个答案:

答案 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