【发布时间】:2018-12-02 11:56:29
【问题描述】:
我希望 Regex 匹配包含相同字符两次(不一定是连续的)的字符串,但如果该字符出现 3 次或更多次,则不匹配。
例如,给定这两个输入:
abcbde
abcbdb
第一个 abcbde 会匹配,因为它包含 b 两次。但是,abcbdb 包含 3 次 b,因此不会匹配。
我已经创建了这个正则表达式,但是它同时匹配:
(\w).*\1{1}
我也尝试使用 ? 修饰符,但它仍然匹配 abcbdb,我不希望它这样做。
【问题讨论】:
-
这看起来很棘手。你事先不知道哪个角色应该恰好出现两次,对吧?在那种情况下,
ababa呢?它应该因为b而匹配,但也不应该因为a而匹配——它是什么?在任何一种情况下,您都需要一个正则表达式引擎来处理尚未匹配的组的后视;没有多少人能做到这一点。所以我们需要知道你使用的是哪个引擎。但我想对字符串进行排序然后检查是否有相同字符的连续运行会更容易和更干净——这很容易用正则表达式或编程方式完成。 -
请标记正则表达式风格。
标签: regex regex-negation regex-lookarounds