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