簡體   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