考虑以下字符串:
1: cccbbb
2: cccaaabbb
我想最终得到像这样的比赛:
1: Array
(
[1] =>
[2] => bbb
)
2: Array
(
[1] => aaa
[2] => bbb
)
如何在一个RegExp中匹配两者?
这是我的尝试:
#(aaa)?(.*)$#
我已经尝试了许多贪婪和不合理的修改变体,但它没有成功。我一添加'?'一切都在[2]中匹配。制作[2] ungreedy并没有帮助。
如果我省略'ccc',我的RegExp会按预期工作,但我必须在开头允许其他字符...
答案 0 :(得分:3)
/(aaa)?((.)\3*)$/
虽然会有额外的[3]。我不认为这是一个问题。
答案 1 :(得分:1)
感谢大家的头脑风暴!我终于能够找到有用的东西了:
^(?:([^a]*)(aaa))?(.*)$
答案 2 :(得分:0)
这是一种非正则表达方式。如果找到则搜索并拆分“aaa”,然后将“aaa”右侧的其余部分存储到数组中。
$str="cccaaabbb";
if (strpos($str,"aaa")!==FALSE){
$array[]="aaa";
$s = explode("aaa",$str);
$array[]=end($s);
}
print_r($array);
输出
$ php test.php
Array
(
[0] => aaa
[1] => bbb
)
至于[1],根据你找不到“aaa”时的标准,它可以像使用strpos()从字符4开始获取子串一样简单。
答案 3 :(得分:0)
这将与小组相匹配,但它不是很灵活,你可以更详细地说明你需要做什么。一次抓取三个字符并评估它们可能要容易得多。
此外,我在poweshell中对此进行了测试,其中正则表达式略有不同。
(一个{3,3})*(B {3,3})
答案 4 :(得分:0)
这样做:
$sPattern = "/(aaa?|)(bbb)/";
这很有效。