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

时间:2015-05-22 05:28:40

标签: php regex split

我是正则表达式的新手,并且无法弄清楚如何编写模式以匹配我需要的模式。任何帮助都会很棒!

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

  • 示例分隔符:>
  • 示例字符串:

    $str = 'word1 > word-2 > word.3 > word*4';
    
  • 我想要的比赛:

    array([0] => 'word1', [1] => 'word-2', [2] => 'word.3', [3] => 'word*4',);
    

我已经查看了以下回复,虽然他们很接近,但他们并没有帮助我实现我的需求:

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

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

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

3 个答案:

答案 0 :(得分:3)

您只需使用array_mapexplode作为

即可
$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

答案 1 :(得分:1)

如上所述,您可以使用explode:

$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
#    )

答案 2 :(得分:1)

我会使用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
)