我想匹配后面跟着一个以不同数字开头的行的行,就像本例中第三行所做的那样。1.什么是最好的正则表达式?1.为什么下面的两个尝试失败了?\v^(\d+)\s+.*\n(\1)\@<!\d+\s和\v^(\d+)\s+.*\n\1\@!(令我惊讶的是,\v^(\d+)\s+.*\n\1\@=确实匹配第1、2和4行,所以我不明白为什么使用\@!会给出“逆”)。
\v^(\d+)\s+.*\n(\1)\@<!\d+\s
\v^(\d+)\s+.*\n\1\@!
\v^(\d+)\s+.*\n\1\@=
\@!
w8biq8rn1#
你可以使用这个正则表达式来得到正确的匹配:
\v^(\d+)\s.*\n\1@!\d@=
字符串它相当于这个PCRE regex:
^(\d+)\s.*\n(?!\1)(?=\d)
型这里使用(?=\d)或\d@=来确保不匹配输入中的最后一行。RegEx Demo
(?=\d)
\d@=
r8uurelv2#
“更正”后的正则表达式是\v^(\d+)\s.*\n\1@!。*(编辑:请参阅@anubhava的答案,以避免匹配最后一行。
\v^(\d+)\s.*\n\1@!
答案有点荒谬,但我保留了这个问题,以防别人犯同样的错误。非常神奇的\v也会影响@,所以不需要反斜杠。包括它(就像我做的那样)将@转义为普通字符。
\v
@
2条答案
按热度按时间w8biq8rn1#
你可以使用这个正则表达式来得到正确的匹配:
字符串
它相当于这个PCRE regex:
型
这里使用
(?=\d)
或\d@=
来确保不匹配输入中的最后一行。RegEx Demo
r8uurelv2#
“更正”后的正则表达式是
\v^(\d+)\s.*\n\1@!
。*(编辑:请参阅@anubhava的答案,以避免匹配最后一行。说明
答案有点荒谬,但我保留了这个问题,以防别人犯同样的错误。
非常神奇的
\v
也会影响@
,所以不需要反斜杠。包括它(就像我做的那样)将@
转义为普通字符。