我得到它在更高级别上做的...它检测到重复的单词。我无法理解的是这是如何运作的逻辑。如果我的理解消失,我希望你能纠正我。其他细节假设我在Linux机器上使用grep。
现在对于我感到困惑的部分。
如果可能,我会很感激外行人的条款。
答案 0 :(得分:3)
(\b\w+) \1\b
检测到重复的字。例如,abc abc
或aaa aaa
或x123_ x123_
。
单词是单词字符的序列,定义如下。
单词字符,取决于模式(ASCII,Locale或Unicode)将匹配字母表(可以是区域设置),数字(可以是区域设置)和下划线。
\b
检测字边界,这是您可以在之前或之后(但不是两者)找到字符的位置。
上面的正则表达式存在轻微缺陷。如果该单词重复3次或更多次,则在替换为捕获组1时,将仅删除重复单词的一半。
答案 1 :(得分:1)
模式说明:
( group and capture to \1:
\b the word boundary
\w+ word characters (a-z, A-Z, 0-9, _) (1 or more times)
) end of \1
' '
\1 what was matched by capture \1
\b the word boundary
如果您使用\w
来捕获a-z,A-Z,0-9,_因此您不需要指定用于字边界的第一个\b
。
\1
是由第一组匹配的后向引用。
此处括号(...)
用于制作组。
(\b\w+) \1\b
First Group ------^^^^^^ ^-------- Match First Group again
答案 2 :(得分:0)
\ 1是反向引用,这意味着它与最后一个捕获组匹配。 在这种情况下,\ b \ w是捕获组,因此\ 1匹配最后捕获的组。
有关反向引用的更多信息,请点击此处 http://www.regular-expressions.info/backref.html