我正在尝试匹配链接与链接文本不对应的 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 正则表达式 : negative backreferences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23660282/