Vim正则表达式:匹配与下一行不同的行

hlswsv35  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(122)

我想匹配后面跟着一个以不同数字开头的行的行,就像本例中第三行所做的那样。
1.什么是最好的正则表达式?
1.为什么下面的两个尝试失败了?\v^(\d+)\s+.*\n(\1)\@<!\d+\s\v^(\d+)\s+.*\n\1\@!(令我惊讶的是,\v^(\d+)\s+.*\n\1\@=确实匹配第1、2和4行,所以我不明白为什么使用\@!会给出“逆”)。

w8biq8rn

w8biq8rn1#

你可以使用这个正则表达式来得到正确的匹配:

\v^(\d+)\s.*\n\1@!\d@=

字符串
它相当于这个PCRE regex:

^(\d+)\s.*\n(?!\1)(?=\d)


这里使用(?=\d)\d@=来确保不匹配输入中的最后一行。
RegEx Demo

r8uurelv

r8uurelv2#

“更正”后的正则表达式是\v^(\d+)\s.*\n\1@!。*(编辑:请参阅@anubhava的答案,以避免匹配最后一行。

说明

答案有点荒谬,但我保留了这个问题,以防别人犯同样的错误。
非常神奇的\v也会影响@,所以不需要反斜杠。包括它(就像我做的那样)将@转义为普通字符。

相关问题