繁体   English   中英

正则表达式PHP preg_match_all

[英]Regular Expression PHP preg_match_all

我是一个自以为是的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

请理解我无法更改输入数组,它就是它。 因此,基本上在第一个数组上,我已加载了整个列表,然后需要按| 字符。

感谢您的任何建议。

无需在此处使用正则表达式。 explodetrim将正常工作。

$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
$list = explode('||',trim($list,';'));

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

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

print_r($part[1]);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM