我有字符串
$s = 'Sections: B3; C2; D4';
和regexp
preg_match('/Sections(?:[:;][\s]([BCDE][\d]+))+/ui', $s, $m);
结果是
Array
(
[0] => Sections: B3; C2; D4
[1] => D4
)
我如何获得包含所有部分B3, C2, D4
我无法使用preg_match_all('/[BCDE][\d]+)/ui'
,因为在Sections:
字后强烈搜索。
元素数量(B3,С2...)可以是任意数量。
答案 0 :(得分:3)
您可以使用
'~(?:\G(?!^);|Sections:)\s*\K[BCDE]\d+~i'
请参阅regex demo
<强>详情
(?:\G(?!^);|Sections:)
- 上一场比赛的结尾和;
(\G(?!^);
)或(|
)Sections:
子串\s*
- 0个或更多空白字符\K
- 匹配重置运算符[BCDE]
- 来自字符集的字符(由于i
修饰符,不区分大小写)\d+
- 一位或多位数。请参阅PHP demo:
$s = "Sections: B3; C2; D4";
if (preg_match_all('~(?:\G(?!^);|Sections:)\s*\K[BCDE]\d+~i', $s, $m)) {
print_r($m[0]);
}
输出:
Array
(
[0] => B3
[1] => C2
[2] => D4
)
答案 1 :(得分:0)
你不需要正则表达式,爆炸会很好 删除&#34;部分:&#34;然后爆炸其余的字符串。
$s = 'Sections: B3; C2; D4';
$s = str_replace('Sections: ', '', $s);
$arr = explode("; ", $s);
Var_dump($arr);