正则表达式:连续重复,中间有一封信

时间:2013-02-17 09:33:25

标签: java regex

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

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

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

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

1 个答案:

答案 0 :(得分: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])