我试图匹配链接与链接文本不对应的XML条目,如下所示:
<link linkend="G431">X595</link>
但不是链接文本正确的链接,如下所示:
<link linkend="G431">G431</link>
如何编写vim正则表达式以匹配其中的第一个?我尝试过这样的事情:
linkend="\([A-Z]\d\+\)">[^\1]
和
linkend="\([A-Z]\d\+\)">^\(\1\)\@!
但我似乎无法开始工作。基本上我试图说&#34;找到链接文本不等于链接位置的链接。&#34;
答案 0 :(得分:4)
在您的第二个版本中,您有…\)">^\(\1\)\@!…
。你在这里不需要插入:它意味着自己(插入符号)处于这个位置(通常它意味着“行首”,但不是那里:见:h /^
)。你不需要括号(它们没有伤害,但不需要它们):
linkend="\([A-Z]\d\+\)">\1\@!
。否定通过!
表示(正面预测为\@=
)。在[^\1]
变体中,您匹配任何字符,但反斜杠,ASCII和换行符:集合不支持反向引用,即使它们支持它,集合匹配多个字符也是不合逻辑的(如果他们这样做会拉出匹配文本中出现的一组字符。)
答案 1 :(得分:1)
你的方法非常接近正确。
我刚刚使用了负向前瞻:
linkend="\([A-Z]\d\+\)">\(\1\)\@!
答案 2 :(得分:0)
/<link linkend="\(.*\)">\(\1\)<\/link>