PHP - 正则表达式 - 匹配正则表达式而不包括多次相同的正则表达式

时间:2016-11-22 19:12:27

标签: php regex preg-match preg-match-all

使用PHP,我有以下代码:

$text = '[text 1] highlight("ABC DEF") [text 2] highlight("GHI JKL") [text 3] [text 4]';

然后我想要catch以下groups

group 1: highlight("ABC DEF") [text 2]
group 2: highlight("GHI JKL") [text 3] [text 4]

我尝试了以下内容:

preg_match_all('/highlight.*/', $text, $matches);
print_r($matches);

但我明白了:

Array
(
    [0] => Array
        (
            [0] => highlight("ABC DEF") [text 2] highlight("GHI JKL") [text 3] [text 4]
        )

)

但这不是我想要的,因为它们在一起。

我也尝试过:

preg_match_all('/highlight/', $text, $matches);
print_r($matches);

但我明白了:

Array
(
    [0] => Array
        (
            [0] => highlight
            [1] => highlight
        )

)

那不是我想要的。

知道使用regexp来获取我提到的groups above吗?

2 个答案:

答案 0 :(得分:3)

<?php
$matches = array();

preg_match_all("/highlight\([^)]*\) .*?(?= highlight|$)/", '[text 1] highlight("ABC DEF") [text 2] highlight("GHI JKL") [text 3] [text 4]', $matches);

var_dump($matches);

解释:

https://regex101.com/r/8ZQjNr/5

答案 1 :(得分:0)

使preg_split?

preg_split("/(highlight)/", $input_line);

在此处试试:http://www.phpliveregex.com/p/hYr

使用PREG_SPLIT_DELIM_CAPTURE选项,它将在字符串中保持突出显示