正则表达式 - 在特定字符的每个实例之后获取所有字符

Regex - Get all characters after each instance of specific character

我对正则表达式还很陌生,只是不知道如何编写一个模式来匹配我的需要。任何帮助都会很棒!

我想使用 PHP & 正则表达式来捕获字符串中特定唯一字符(定界符)之后的每组字符,以及该定界符第一个实例之前的任何字符集。然后我想 "match" 所需的输出到 PHP 数组中。

我查看了以下回复,虽然它们很接近,但并不能完全帮助我实现我的需要:

这是我目前正在使用的 PHP 函数,但它目前只能找到分隔符之间的字符:

function parse_conditions($str, $delimiter='>') {
if (preg_match_all('/' . $delimiter . '(.*?)' . $delimiter . '/s', $str, $matches)) {
    return $matches[1];
}

注意:给定字符串中的项目数量可能会有所不同,因此我不能使用需要特定数量分隔符的模式(例如 /^(.*?)>(.*?)>(.*?)>$/

如前所述,您可以为此使用爆炸:

$str = 'word1 > word-2 > word.3 > word*4';
print_r(explode(" > " , $str));

但是为了完整起见,我们也使用 RegEx。

在这种情况下,我们可以告诉正则表达式将所有不是空格和分隔符的字符组合在一起 >:

preg_match_all('/([^>\s]+)/', $str, $matches);
echo print_r($matches[0]);

# [0] => Array
#    (
#        [0] => word1
#        [1] => word-2
#        [2] => word.3
#        [3] => word*4
#    )

为此我会使用 preg_split、http://php.net/preg_split

<?php
$matches = preg_split('~\s*>\s*~', 'word1 > word-2 > word.3 > word*4');
print_r($matches);

输出:

Array
(
    [0] => word1
    [1] => word-2
    [2] => word.3
    [3] => word*4
)

\s*表示任意数量的空白字符。

这类似于使用爆炸。

<?php
$matches = explode('>', 'word1 > word-2 > word.3 > word*4');
print_r($matches);

但是正如你在爆炸中看到的那样,你有空格:

Array
(
    [0] => word1 
    [1] =>  word-2 
    [2] =>  word.3 
    [3] =>  word*4
)

您可以简单地将 array_map along with explode 用作

$str = 'word1 > word-2 > word.3 > word*4';
$result = array_map('trim',  explode('>', $str));
print_r($result);

输出:

Array
(
    [0] => word1
    [1] => word-2
    [2] => word.3
    [3] => word*4
)

你可以Check it here