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

  • 本文关键字:如果 存在 句子 regex
  • 更新时间 :
  • 英文 :


使用此输入:

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 上的外观,并提供一些示例

最新更新