Regex “如何匹配”;不后跟某些文字”;使用正则表达式?

Regex “如何匹配”;不后跟某些文字”;使用正则表达式?,regex,Regex,我想匹配literal(--即:literal后跟空格,然后加上括号。但是如果literal是“hi”或“hello”或“bye”,则不应匹配 因此,我希望得到以下结果: 我正试图通过前瞻正则表达式来实现它,所以我把 (^|\s)(?!((hello|hi|bye)(\s\())) 但这一切都是一样的 我不能通过向后看,因为它不需要正则表达式 是否有任何正则表达式来执行此任务 更新 我正在尝试使用perl和checkstyle(不知道checkstyle使用哪种风格) 前瞻性为两者提供匹配。

我想匹配literal(--即:literal后跟空格,然后加上括号。但是如果literal是“hi”或“hello”或“bye”,则不应匹配

因此,我希望得到以下结果:

我正试图通过前瞻正则表达式来实现它,所以我把

(^|\s)(?!((hello|hi|bye)(\s\()))
但这一切都是一样的

我不能通过向后看,因为它不需要正则表达式

是否有任何正则表达式来执行此任务

更新

我正在尝试使用perlcheckstyle(不知道checkstyle使用哪种风格)

前瞻性为两者提供匹配。

但是在lookbehind中,Perl给出了一个错误
变量长度lookbehind未在regex m/(?)中实现,而在checkstyle中我得到了期望的结果。

如果您使用的是与Perl兼容的
regex
引擎,您应该能够使用像这样的零宽度负lookbehind断言

(?<!hello|hi|bye) \(
(?
使用R的示例(打开perl兼容性)

字符串
我们可以更精确一点,就像这样

^.+(?<!^hello|^hi|^bye)\s\(
^.+(?

匹配字符串的开头,然后可选地匹配任何字符,但不包括字符串开头的
hello
hi
bye
,然后是空格,然后是开括号。

正则表达式不起作用,因为它总是匹配文本和
之间的空格(
(因为空格匹配
(^\s)
不匹配)((hello | hi | bye)(\s\())
)。它还应该与许多其他位置的空格匹配

这个正则表达式应该可以:

\b(?!(?:hello|hi|bye)\s)\w+\s\(

说明:

\b
-单词边界。
(?!(?:hello | hi | bye)\s
-对
hello
hi
bye进行负面展望,后面跟一个空格。
它后面跟一个空格,因此我们匹配
byelo(
),如果不需要,请将其删除。
(?:hello | hi | bye)
与简单的
(hello | hi | bye)相反
只是使其成为一个非捕获组,它不会更改输出。
\w+
-一个或多个单词字符(单词字符通常是
[A-Za-z0-9_33;]
)。
\s
-一个空格。
\(
-一个括号。

我猜是-

压缩:

 (?:^|(?<=\s))((?!(?:hello|hi|bye)\s\()[a-zA-Z]+\s\()

(?:^ |)(?使用哪种正则表达式味道?我不明白“我不能通过向后看来做,因为它不使用正则表达式”-你能更详细地解释一下你的意思吗?@Damien_不信者:我明白了。它说“大多数正则表达式风格不允许您在lookback中只使用任何正则表达式,因为它们不能向后应用正则表达式。”@m.buettner:也有一个问题。我正在尝试perl和checkstyle(不知道checkstyle使用哪种风格).lookahead提供了两者的匹配。但是在lookahead中,Perl提供了错误
变量长度lookahead,而在regex m/(?)中没有实现,而在checkstyle中我得到了期望的结果。您可以通过将交替提取为三个lookahead来解决变量lookahead问题,如
(?:(?。我在perl
变量长度查找中发现了这个错误,但在regex m/(?@Panther中没有实现。我稍微修改了一下。可能会与您的regex引擎一起使用吗?。这与,
Notbye不匹配(
@Junuxx谢谢。我想这会起作用的。有没有其他的例子说明初始问题不起作用?第一个链接有,但那是OP的正则表达式。第二个链接(我的正则表达式)匹配正确。编辑以澄清。是的,一开始没有看到第二个链接:P+1'd。
\b(?!(?:hello|hi|bye)\s)\w+\s\(
 (?:^|(?<=\s))((?!(?:hello|hi|bye)\s\()[a-zA-Z]+\s\()
 (?:
      ^ 
   |  (?<= \s )
 )
 (
      (?!
           (?: hello | hi | bye )
           \s \(
      )
      [a-zA-Z]+ \s \(
 )