Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式PHP preg_match_all_Php_Arrays_Preg Match All - Fatal编程技术网

正则表达式PHP preg_match_all

正则表达式PHP preg_match_all,php,arrays,preg-match-all,Php,Arrays,Preg Match All,我是一个自以为是的PHP初学者,我还在学习正则表达式。下面是我在使用preg\u match\u all和数组时遇到的一个问题 我的阵列正好包含以下信息: ;;CARLOS||ANDREW||STEPH||SUE||JUDY||HAROLD||JAMES||KATIE||JESSICA;; 我要做的是分别显示每个名称大约有250个不同的名称,数组总是以;;并且总是以;;这是我的问题,首先,我的数组可以加载,但只加载名字,方法是: preg_match_all('/^(.+?)\|\|/

我是一个自以为是的PHP初学者,我还在学习正则表达式。下面是我在使用
preg\u match\u all
和数组时遇到的一个问题

我的阵列正好包含以下信息:

;;CARLOS||ANDREW||STEPH||SUE||JUDY||HAROLD||JAMES||KATIE||JESSICA;;
我要做的是分别显示每个名称大约有250个不同的名称,数组总是以;;并且总是以;;这是我的问题,首先,我的数组可以加载,但只加载名字,方法是:

    preg_match_all('/^(.+?)\|\|/', $body, $part);
    foreach ($part[1] as $part){
    print_r($part);
结果是
;;卡洛斯

其中,
$body
是一个巨大的名称列表(包含250多个名称的数组)

预期结果:

CARLOS
ANDREW
STEPH
JUDY
HAROLD
JAMES
KATIE
JESSICA
请理解我无法更改输入数组,它就是这样。因此,基本上在第一个数组中,我加载了整个列表,然后我需要将其按|个字符进行拆分


谢谢你的建议。

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

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

print_r($part[1]);

preg_match_all('/(?这里不需要使用正则表达式。并且可以正常工作

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

如果你想要你想要的结果准确,那么上面的输出

echo implode(" ", $arr);
// Outputs: CARLOS ANDREW STEPH SUE JUDY HAROLD JAMES KATIE JESSICA
我会使用
explode()

<?php

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

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

print_r($names);

你看过和
str_replace
删除分号了吗?我不知道你可以用trim来删除分号!酷!+1!:-)谢谢谢谢谢谢,这开始让我头疼了!今天我学习了内爆和修剪:d这非常好!!非常适合我正在做的事情,但我不知道为什么这样做:(?@user1294097:The
(?…)
用于零宽度断言。它们的意思是“确保指定的字符在那里,但实际上不匹配”。这会将字符留给其余的匹配项。此外,如果字符串完全如图所示,则使用
trim
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
)