regex - vim 正则表达式 : negative backreferences?

标签 regex vim

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

相关文章:

php - 获取两个字符串之间的文本的正则表达式

vim - 如何使 vim-latex 正确编译而无需保存?

linux - Vim - 强制行之间有额外的间距以添加下划线

javascript - 用于匹配 URL 中多个正斜杠的正则表达式

javascript - 除模式外的正则表达式

c# - decimal.Parse 中接受的小数的正则表达式

regex - R - 将可变数量的空格插入邮政编码字符串

c++ - 如何在VI中移动到下一个括号

在vim中搜索和替换被拉取的文本的内容

perl - 是否有使 Moose 属性显示在 Tag_List 中的 vim 插件?