2

我正在尝试解决正则表达式的问题。我使用的 Java 正则表达式显然与 Perl 中的类似。

我想搜索一个字符串,它有一个从 1 到 9 的数字,连续重复 3 次或更多次,或者在重复之间使用单个字母“w”。

例如。12333、123w3、12ww3、ww123 应该都给出成功的匹配,但不是 12345、1234w、1323w。

我尝试了模式“[[0-9]w]{3,}”,但我现在明白为什么这绝对是不正确的。有人可以给我一些线索来构建符合我要求的搜索模式吗?

4

1 回答 1

4

如果我正确理解这w是一个通配符(因为我不确定您所写的内容 - 更多的是您提供的示例),那么这个正则表达式应该可以工作......

([1-9])(\1|w){2,}|w([1-9])(\3|w)+|ww([1-9])\5*

这可能不是最优雅的解决方案,但应该可以工作,并分成这样的部分......

           # matches that don't start with wildcards
([1-9])    # get a digit, and capture for future reference
(\1|w){2,} # the captured digit, or the letter w, 2 or more times
|          # or, matches that start with a single w
w          # match a w
([1-9])    # get a digit, and capture for future reference
(\3|w)+    # get one or more of the captured digit, or letter w
|          # or, matches starting with two w
ww         # get two w
([1-9])    # get a digit, and capture for future reference
\5*        # get all the successive captured digits

这也应该工作......

([1-9])(\1|w){2,}|w([0-9](\3|w)|w[0-9])
于 2013-02-17T09:40:01.873 回答