从字符串中提取多个匹配项

I'd like to extract multiple strings from a larger string.

The following is an error returned from the Google AdWords API. This particular example has two quoted instances following trigger:, but there could be several.

What would be the best way of extracting x amount of quoted instances from the larger string and saving them in an array?

Is there a PHP function available or should I use implode and a loop?

Any ideas would be appreciated, I'm happy to hack away at the code, just need some pointers.

Many thanks

AdGroup update failed: [AdGroupServiceError.DUPLICATE_ADGROUP_NAME @ operations[6].operand.name; trigger:'prince2 training west yorkshire', AdGroupServiceError.DUPLICATE_ADGROUP_NAME @ operations[8].operand.name; trigger:'prince ii training and exam']

This is how you can do

$str = "AdGroup update failed: [AdGroupServiceError.DUPLICATE_ADGROUP_NAME @ operations[6].operand.name; trigger:'prince2 training west yorkshire', AdGroupServiceError.DUPLICATE_ADGROUP_NAME @ operations[8].operand.name; trigger:'prince ii training and exam']";

preg_match_all("/'(.*?)'/im",$str,$match);

print_r($match[1]);

More specifically if its always after trigger: you can use the following

preg_match_all("/trigger:'(.*?)'/im",$str,$match);

Output ::

Array
(
    [0] => prince2 training west yorkshire
    [1] => prince ii training and exam
)

Explanation

/'(.*?)'/im
    ' matches the character ' literally
    1st Capturing group (.*?)
        .*? matches any character (except newline)
            Quantifier: Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
    ' matches the character ' literally
    i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])
    m modifier: multi-line. Causes ^ and $ to match the begin/end of each line (not only begin/end of strin