我需要匹配一个在文本中出现2次的英文文本。我试过了
(^|\ )([^\ ][^\b]*\b).*\ \2\b
但这与所有行都不匹配。
答案 0 :(得分:3)
你的正则表达式存在一些问题。例如,\b
字边界不能用于字符类,因此[^\b]*
将无法按预期工作。
你可能想要像
这样的东西(?s)\b(\w+)\b.*\b\1\b
这将匹配从第一次出现的单词到最后一次出现的整个文本。这可能不是你实际想要的。
另一个想法:
(?s)\b(\w+)\b.*?\b\1\b
这将仅匹配第一次出现的单词与下一单词的文本。
这两种方法的问题在于例如像
这样的文本foo bar bar foo
正则表达式将从foo
到foo
匹配,盲目地忽略中间存在重复的bar
。
因此,如果您确实想要查找重复出现的所有单词,请使用
(?s)\b(\w+)\b(?=.*?\b\1\b)
<强>解释强>
(?s) # Allow the dot to match newlines
\b(\w+)\b # Match an entire word
(?= # Assert that the following regex can be matched from here:
.*? # Any number of characters
\b\1\b # followed by the word that was previously captured
) # End of lookahead