难!正则表达式字符串匹配
有这样的字符串"aa11111bb22222bb33333bb4444aa55555bb666"这样的字符串,我想从中找出以"aa"开始(唯一),以"bb"结尾(不唯一)的字符串,上面的可拆分成"aa11111bb22222bb33333bb"和"aa55555bb"两种情况,第二种情况我可以用"aa.*?bb"匹配到,但是第一种情况应该怎样匹配呢?
以上字符中的数字代表任意字符,不确定的。
我的E-Mail: xiaoaiwhc@gmail.com
[swf=650,60]http://img.alimama.cn/bm/wrappler_swf/2009-03-22/208380_650x60.swf?v=1237711939[/swf]
[解决办法]
你写的那不是正则表达式,而是通配符。
首先什么是正则表达式。
例如,“aa11111bb22222bb33333bb4444aa55555bb666”(其中aa,bb是固定搭配,其余的是任意字符,且前二字符是“aa”)
用正则式可表示为aa(a|b|c|d|e|.....)*(aa|bb)(a|b|c|d|e|.....)*。其中省略号代表了字符集里的各个字符,包括空集φ。
至于你所求的问题,挺晚了,怕思考多了睡不着,我就给一个答案,我觉得肯定对,但不一定最简单。这还算短的呢。
aa(a|φ)((b|c|d|e|.....)*|(a|φ)|(φ|b|c|d|e|.....)*)*bb。省略号中不包括空集φ和a。
[解决办法]
可以直接使用以下表达式匹配
/a+[^a+]*b+/#测试程序如下our $str = "aa11111bb22222bb33333bb4444aa55555bb666";while($str =~ /a+[^a+]*b+/g){ print $&."\n";}
[解决办法]
(aa.*?bb)(?=.*?(aa|\\z))
[解决办法]
"aaowre;ldfj;adfbbasfjoweireewo;/;bbwoer;a/kaaiowerbboiwwrebboiiewaak;ljobb"
字符串可分解为:
1. "aaowre;ldfj;adfbbasfjoweireewo;/;bb
2. aaiowerbboiwwrebb
3. aak;ljobb
那可以另有:
aaowre;ldfj;adfbb吗?