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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 对vim中捕获组的反向引用_Regex_Vim_Matching_Backreference - Fatal编程技术网

Regex 对vim中捕获组的反向引用

Regex 对vim中捕获组的反向引用,regex,vim,matching,backreference,Regex,Vim,Matching,Backreference,在某些文本中,我需要找到一个字符串,该字符串可能是以下字符串之一 foo#foo%foo foo#foo%bar foo#bar%foo foo#bar%bar bar#foo%foo bar#foo%bar bar#bar%foo bar#bar%bar 我可以这样写正则表达式匹配器 /\(foo\|bar\)#\(foo\|bar\)%\(foo\|bar\) 这很好用 但是我想避免在matcher中捕获组的重复 如果我写了这样的东西 /\(foo\|bar\)#\1%\1 它只匹配我

在某些文本中,我需要找到一个字符串,该字符串可能是以下字符串之一

foo#foo%foo
foo#foo%bar
foo#bar%foo
foo#bar%bar
bar#foo%foo
bar#foo%bar
bar#bar%foo
bar#bar%bar
我可以这样写正则表达式匹配器

/\(foo\|bar\)#\(foo\|bar\)%\(foo\|bar\)
这很好用

但是我想避免在matcher中捕获组的重复

如果我写了这样的东西

/\(foo\|bar\)#\1%\1
它只匹配我在开头提到的第一个和最后一个可能的字符串


问:我可以参考之前的捕获组本身,而不是之前的匹配吗?

我完全不想创建和重用子模式,并像@Amadan和@lcd047那样重用它们,但是Vim不支持我所知道的这种行为

或者,您可以在编辑模式时使用
打开
命令行窗口
。在此窗口内,您可以使用常规Vim命令编辑图案,例如
daw
ct)
等。完成后,您可以按
并运行搜索/命令

关于这一点,有一个很好的插曲:

有关更多帮助,请参阅:

:h command-line-window
:h q/
:h c_Ctrl-f

不,regexp不是这样工作的。@lcd047:有许多regexp方言。这不是Vim regexp的工作方式。您可以在Oniguruma(Ruby的regexp引擎)中实现这一点,例如()@Amadan,您也可以使用它,可能还有许多其他工具。然而,我相信OP的问题是关于Vim的。这篇文章的标题中提到了Vim,这让人很难错过。从我的回答中是否有任何特殊原因可以推断我指的是Vim regexps以外的任何东西?@lcd047:没有。但是也没有任何特殊原因可以阻止推断您指的是任何地方的所有regexp;这并不是一个很大的延伸,因为直到最近还没有正则表达式引擎能够做到这一点,而在理论正则表达式中,它只是一个外来的概念。我只是想澄清一下,可能的读者对regexp的了解可能没有你那么多。是的,命令行窗口是一个非常有用的特性,应该经常提到它。在旁注中,
q?
打开相同的窗口进行向后搜索,
q:
打开类似的窗口进行编辑Ex命令。