我正在尝试用正则表达式解决问题。我正在使用类似于Perl中的Java正则表达式。
我想搜索一个字符串,该字符串具有1-9的单个数字,连续重复3次或更多次,或者重复之间使用单个字母“w”。
例如。 12333,123w3,12ww3,ww123都应该给出成功的比赛但不是12345,1234w,1323w。
我尝试了模式“[[0-9] w] {3,}”但我现在明白为什么这肯定是不正确的。有人能给我一些线索来构建符合我要求的搜索模式吗?
答案 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])