Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-反向引用-单词分隔符?_Regex_Vim_Backreference - Fatal编程技术网

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\>