我已经尝试了一段时间来匹配以下情况,但我对正则表达式并不是那么好,希望能有一些帮助......
我需要匹配包含a或b的所有单词,但每个单词需要用b分隔,所以在任何单词中都没有aa。
接受的词语: a,b,ba,ababbaba
不接受的字词: aa,babaa
答案 0 :(得分:3)
使用锚定的负面展望:
^(?!.*aa)[ab]+$
表达式[ab]+
表示字符串由a和b组成(非常简单)。
表达式(?!.*aa)
,以^
为开头,断言“aa”不会出现在输入中的任何位置。
无需预见即可解决问题:
^(b|ab|a$)+$
条款or
ed在左右首选项中使用。考虑到这一点,正则表达式应该如何运作。
答案 1 :(得分:2)
/^a?(ba?)*$/
...阐释
/^ # start regex and start of string
a? # optional a
( # start group
b # exactly one b
a? # optional a
)* # end group, and repeat zero or more times
$/ # end regex and end of string
用简单的英语,第一个字符可以是a
,或者向右移动到主重复组,可以重复零次或多次,并匹配b
后跟零或一个a
,直到最后。
(根据评论避免灾难性的回溯)
/^a?(b|ba)*$/
...解释
/^ # start regex and start of string
a? # optional a
( # start group
b|ba # match `b` or `ba`
)* # end group, and repeat zero or more times
$/ # end regex and end of string
用简单的英语,第一个字符是a
,或者移到主重复组,重复组重复零次或多次,由b
或ba
组成,然后结束匹配和正则表达式。
答案 2 :(得分:1)
理想的RE就是:
^a?(b+a)*b*$
关键是它是一个简单的RE,可以在一次扫描中匹配或拒绝,没有回溯。
答案 3 :(得分:0)
检查这是否适合您。 \ B(?(A B + A)+?)\ C | \ B((A B +)+?)\ C | \ B(((B + A)*)\ b)中
我没有时间核实每一个可能的案例。
您可以在线使用Regular Expressions Online verifier
干杯