我正在尝试匹配链接与链接文本不对应的XML条目,如下所示:
<link linkend="G431">X595</link>
但不是链接文本正确的链接,例如:
<link linkend="G431">G431</link>
我该如何编写vim正则表达式来匹配其中的第一个?我已经尝试过类似的事情:
linkend="\([A-Z]\d\+\)">[^\1]
和
linkend="\([A-Z]\d\+\)">^\(\1\)\@!
但我似乎不太能工作。基本上,我试图说“在链接文本不等于链接位置的地方找到一个链接”。
最佳答案
在第二个变体中,您有…\)">^\(\1\)\@!…
。您在这里不需要插入符号:它表示自身(插入符号)处于该位置(通常表示“行的起点”,但不在那儿:请参见:h /^
)。不需要括号(它们不会造成伤害,但是不需要):
linkend="\([A-Z]\d\+\)">\1\@!
。否定通过
!
表示(正向提前表示\@=
)。在[^\1]
变体中,您可以匹配任何字符,但是反斜杠,ASCII一个和换行符:集合不支持反向引用,即使它们确实支持反向引用,集合也不能匹配一个以上的字符(因此,如果匹配,则不合逻辑)它将拉出匹配文本中出现的一组字符)。关于regex - vim regex:否定反向引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23660282/