Regex 正则表达式-反向引用-单词分隔符?
为了通过《掌握正则表达式》一书了解反向引用,第三版我创建了一个包含以下两行的文件: 这个 盗窃案 之后,我尝试执行此命令:Regex 正则表达式-反向引用-单词分隔符?,regex,vim,backreference,Regex,Vim,Backreference,为了通过《掌握正则表达式》一书了解反向引用,第三版我创建了一个包含以下两行的文件: 这个 盗窃案 之后,我尝试执行此命令: :g/\([a-zA-Z]\+\) \1 所以它向我展示了这两条线,很明显这是为什么 在那之后,我试图通过只抓住第一行来限制结果 :g/\(\<[a-zA-Z]\+\>\) \1 有没有解释为什么括号内的分隔符无效 谢谢 使用\(\\)时,它与匹配。要知道的一点是,单词边界的宽度为零。它们只能用于检查某些条件(如此处的单词边界),但不能保存在任何捕获组中。捕
:g/\([a-zA-Z]\+\) \1
所以它向我展示了这两条线,很明显这是为什么
在那之后,我试图通过只抓住第一行来限制结果
:g/\(\<[a-zA-Z]\+\>\) \1
有没有解释为什么括号内的分隔符无效
谢谢
使用\(\\)
时,它与匹配。要知道的一点是,单词边界的宽度为零。它们只能用于检查某些条件(如此处的单词边界),但不能保存在任何捕获组中。捕获组只保存匹配的数据,而不保存任何断言
因此,当您使用\1
反向引用它时,它不记得单词边界
相反,你提到的,你必须使用
:g/\(\<[a-zA-Z]\+\>\) \<\1\>
:g/\(\\)\
引用
有三种不同的位置可以作为单词边界:
如果字符串中的第一个字符是
单词字符
在字符串中的最后一个字符之后,如果
字符是一个单词字符
在字符串中的两个字符之间,
其中一个是单词字符,另一个不是单词字符
您正在从第一个捕获组反向引用文本匹配。没有考虑任何零宽度断言,没有单词边界,没有开始/结束锚点,没有lookbehinds或lookaheadscan请详细解释\
正则表达式的角色?抱歉,我不是OP.@silentmank耶..我忘了..与名称混淆..很乐意帮助
:g/\(\<[a-zA-Z]\+\>\) \<\1\>