Vim中的正则表达式以匹配组捕获

时间:2015-11-14 07:51:20

标签: regex vim

我想找到包含重复两次相同字符串的字词。 (例如wookokss(ok / ok),ccsssscc(ss / ss))。 我认为表达式是\(\w*\)\0

另一种尝试是找到组成的单词重复两次相同的字符串。我的回答是\<\(\w*\)\0\>。 (单词开头+分组(单词)+组捕获+单词结尾)

但他们不起作用。有人能帮助我吗?

3 个答案:

答案 0 :(得分:4)

要查找一个字符重复两次的字符串,该字符串超过两个字符,您可以使用

/\(\w\{2,}\)\1

要匹配包含前面提到的字符串的整个单词,您可以使用

/\<\w\{-}\(\w\{2,}\)\1\w\{-}\>

一点点解释

  • \1 - 匹配\(中第一个子表达式匹配的相同字符串,\)\0匹配整个匹配的模式)
  • \{n,} - 尽可能多地匹配前一个原子的n
  • \{-} - 匹配前面原子的0或更多,尽可能少
  • \w - 字符([0-9A-Za-z_]
  • \< - 单词的开头
  • \> - 单词的结尾

:help pattern

中的更多内容

答案 1 :(得分:3)

  

1。)包含重复两次相同字符串的单词。 (例如wookokss(ok / ok),

要查找包含两个或更多重复字词的单词,请尝试

\(\w\{2,}\)\1

\1匹配第一组中捕获的内容。

  

2。)找到重复两次相同字符串的单词...

捕捉\w\+一个或多个单词字符,然后\1在第一组中捕获的内容

\<\(\w\+\)\1\>

应该是关于它的。 Have a look at this tutorial

答案 2 :(得分:1)

对于第一个使用(.{2,})\1示例:https://regex101.com/r/gK0mM2/2 假设您只查找具有多于1个字符的重复字符串。

以及第二个^(.{2,})\1$示例:https://regex101.com/r/lC2yT7/2

编辑:更改了第二个表达式,现在它还查找至少包含2个字符的字符串