我是一个自我思考的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
请理解我无法更改输入数组,它是什么。所以基本上在第一个数组我加载整个列表然后我需要打破它|字符。
感谢您的任何建议。
答案 0 :(得分: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
答案 1 :(得分:1)
$list = explode('||',trim($list,';'));
答案 2 :(得分:0)
;;CARLOS||
是可用的最小匹配,这正是您要求正则表达式引擎执行的操作。试试这个正则表达式:
preg_match_all('/(?<=\|\||;;)(.+?)(?=\|\||;;)/', $body, $part);
print_r($part[1]);
答案 3 :(得分: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
)