我有一个像这样的字符串
abcabdabeaf
现在我想将它拆分为'a','b'的序列,并且字符串'ab'之后的任何字符都会跟着这样
Array
(
[0] => a
[1] => b
[2] => c
[3] => a
[4] => b
[5] => d
[6] => a
[7] => b
[8] => eaf
)
我目前的尝试是
$string = "abcabdabeaf";
$split = preg_split("/((?<=a)b)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($split);
但结果是
Array
(
[0] => a
[1] => b
[2] => ca
[3] => b
[4] => da
[5] => b
[6] => eaf
)
是否可以使用正则表达式?
答案 0 :(得分:1)
为什么要使用正则表达式? explode()
就在你的小巷里。
<?php $k = "abcabdefabcabcgfgdgdfabde";
var_dump(explode("ab",$k));
?>
如果你的字符串以ab开头,你将获得一个空元素。为了解决这个问题,简单的array_shift
数组!
答案 1 :(得分:1)
我个人觉得在匹配而不是拆分方面更容易想到这个问题:
在代码中:
preg_match_all('/a(?=b)|(?<=a)b|.*?(?=ab|$)/', $s, $matches);
// note that $matches[0] has an empty array element at the end
这也会起作用,虽然比我想要的更冗长:
$final = array(); $first = true;
foreach (explode('ab', $s) as $part) {
if ($first) {
$first = false;
} else {
$final[] = 'a';
$final[] = 'b';
}
$final[] = $part;
}