PHP - 捕获正则表达式匹配以及不匹配的余数

时间:2016-06-10 19:14:22

标签: php regex

对于像asdftheremainderhere这样的字符串,使用正则表达式匹配asdf将字符串拆分为theremainderhereasdf的简单方法是什么?

我尝试使用:

preg_match('/asdf|ghik/', 'asdftheremainderhere', $matches);`

但只有asdf$matches的唯一元素。

3 个答案:

答案 0 :(得分:2)

$matches数组$matches[0]中将是完整模式匹配,$matches[1]将是第一个捕获组(asdf|ghik)$matches[2]将是第二次捕获组(.*),任何字符为0次或更多次:

preg_match('/(asdf|ghik)(.*)/', 'asdftheremainderhere', $matches);

print_r($matches);

收率:

Array
(
    [0] => asdftheremainderhere
    [1] => asdf
    [2] => theremainderhere
)

答案 1 :(得分:2)

您可以使用捕获组来实现这样的,不是吗?

preg_match('/(asdf)(.*)/', 'asdftheremainderhere', $matches);

并添加多行标记(如果您需要换行符,并希望它们在余数中。

答案 2 :(得分:1)

您可以将preg_split与\K一起使用,以保存分隔符

print_r(preg_split('/(asdf|ghik)\K/', 'asdftheremainderhere'));

结果

Array
(
    [0] => asdf
    [1] => theremainderhere
)