【问题标题】:Regular expression to filter urls with strings repeated 3 times or more正则表达式过滤具有重复 3 次或更多次字符串的 url
【发布时间】:2013-03-18 23:36:08
【问题描述】:

我正在使用正则表达式(\b\w+\b)\W+\1{3,} 来过滤字符串重复三次或更多次的网址。我试过(\b\w+\b)\W+\1{3,} 或(\b\w+\b)\W{3,}+\1 但没有帮助

http://rubular.com/r/6IyCPyBiuW -> (\b\w+\b)\W+\1 -> 这可以找到重复超过一次的单词,但我有兴趣找到重复超过三次的单词。

http://rubular.com/r/O9NcobUsTX -> (\b\w+\b)\W+\1{3,} -> 这对于查找重复三个或更多的单词不起作用

【问题讨论】:

  • 之前的回答有问题。更新了替代品。
  • 感谢指正。如果你能简要解释一下你是如何想到这个表达的,那就太好了。我是使用正则表达式的初学者

标签: regex regular-language


【解决方案1】:

以下正则表达式有效:

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

上面也匹配非单词字符,完全正确,所以,或者,你可以使用相当丑陋的外观

(\w+)(?:\W+\1){2,}

详情:

\w    -> single word character
\w+   -> one or more word characters
\W    -> non-word character
\1    -> back-reference to capturing group #1 (in this case, (\w+)
{2,}  -> 2 or more of (?:\W+\1)
(?:)  -> grouping without actually capturing anything

http://rubular.com/r/Trb41xxCAt

【讨论】:

  • 非常感谢!!它帮助我解决了我的问题。但是,我想了解 '\1' 而不是 '+\1'
  • @user1830069 \1是反向引用,指的是第一个捕获组(...)捕获的字符串。 + 与前面的量词一起使用,并表示其中的一个或多个。例如,\w+ 表示 1 个或多个单词字符。请勿阅读+\1。
  • 太棒了!这真的很有帮助。谢谢。
  • 当最后一个重复的单词在行尾时,是否可以修改第一个表达式来工作?当最后一个单词后有新行时,它不起作用。它适用于 grep,但它不起作用,例如这里regexr.com/3ipck
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2018-06-18
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多