PHP regexp如何在preg_match中获取所有匹配项

时间:2018-05-17 18:44:48

标签: php regex

我有字符串

$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...)可以是任意数量。

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);

https://3v4l.org/PcrNK