0

我是一个自以为是的 PHP 初学者,我还在学习正则表达式。这是我遇到的一个问题preg_match_all和数组

我的数组具有以下信息:

;;CARLOS||ANDREW||STEPH||SUE||JUDY||HAROLD||JAMES||KATIE||JESSICA;;

我要做的是单独显示每个名称,大约有 250 个不同的名称,数组总是以 ;; 开头 并且总是以;;结尾 所以这是我的问题,首先我的数组加载正常,但只有名字:

    preg_match_all('/^(.+?)\|\|/', $body, $part);
    foreach ($part[1] as $part){
    print_r($part);

结果是;;CARLOS

巨大的名字列表在哪里$body(包含 250 多个名字的数组)。

期望的结果:

CARLOS
ANDREW
STEPH
JUDY
HAROLD
JAMES
KATIE
JESSICA

请理解我无法更改输入数组,它就是这样。所以基本上在第一个数组上我已经加载了整个列表然后我需要将它打破 | 人物。

感谢您的任何建议。

4

4 回答 4

7

这里不需要使用正则表达式。explode并且trim会正常工作。

$str = trim($body, ";");    // Remove semi-colons
$arr = explode("||", $str); // Return array of strings delimited by double pipes

print_r($arr);

输出

Array
(
    [0] => CARLOS
    [1] => ANDREW
    [2] => STEPH
    [3] => SUE
    [4] => JUDY
    [5] => HAROLD
    [6] => JAMES
    [7] => KATIE
    [8] => JESSICA
)

见行动。

如果你想要你想要的结果,那么implode上面的输出。

echo implode(" ", $arr);
// Outputs: CARLOS ANDREW STEPH SUE JUDY HAROLD JAMES KATIE JESSICA
于 2012-06-06T02:26:01.783 回答
1
$list = explode('||',trim($list,';'));
于 2012-06-06T02:26:38.060 回答
0

;;CARLOS||是可用的最小匹配,这正是您要求正则表达式引擎执行的操作。试试这个正则表达式:

preg_match_all('/(?<=\|\||;;)(.+?)(?=\|\||;;)/', $body, $part);

print_r($part[1]);
于 2012-06-06T02:23:32.767 回答
0

我会explode()改用。

<?php

$string=";;CARLOS||ANDREW||STEPH||SUE||JUDY||HAROLD||JAMES||KATIE||JESSICA;;";

$names=explode("||", substr($string,2,strlen($string)-4));

print_r($names);

给我们:

Array
(
    [0] => CARLOS
    [1] => ANDREW
    [2] => STEPH
    [3] => SUE
    [4] => JUDY
    [5] => HAROLD
    [6] => JAMES
    [7] => KATIE
    [8] => JESSICA
)
于 2012-06-06T02:27:45.620 回答