我正在尝试匹配链接与链接文本不对应的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/

10-12 19:51