簡體   English   中英

正則表達式:設為“零或一次出現”條件,但僅適用於最后一次匹配

[英]Regex: make 'zero or one time occurence' condition but only for the last match

我有這個字符串:

key1:val1;key2:val2;key3:val3

也可以這樣寫:

key1:val1;key2:val2;key3:val3;

我想要上面的兩個字符串都為preg_match_all,因此它將返回相同的數組,如下所示:

比賽1

Array
(
    [0] => key1
    [1] => key2
    [2] => key3
)

比賽2

Array
(
    [0] => val1
    [1] => val2
    [2] => val3
)

現在,我正在使用此正則表達式:

(.*?):(.*?);

不幸的是,它不適用於第一個字符串。 我之前嘗試過使用正則表達式,但結果更糟:

(.*?):(.*?);?

到目前為止,這是我的實驗: https : //3v4l.org/5HAco 如果有一個純PHP函數可以解決此問題,我也可以接受。

$text = "key1:val1;key2:val2;key3:val3";

preg_match_all("/(.*?):(.*?)(?:;|$)/",$text,$matches);
print_r($matches);


$text = "key1:val1;key2:val2;key3:val3;";

preg_match_all("/(.*?):(.*?)(?:;|$)/",$text,$matches);
print_r($matches);

輸出:

Array
(
    [0] => Array
        (
            [0] => key1:val1;
            [1] => key2:val2;
            [2] => key3:val3
        )

    [1] => Array
        (
            [0] => key1
            [1] => key2
            [2] => key3
        )

    [2] => Array
        (
            [0] => val1
            [1] => val2
            [2] => val3
        )

)
Array
(
    [0] => Array
        (
            [0] => key1:val1;
            [1] => key2:val2;
            [2] => key3:val3;
        )

    [1] => Array
        (
            [0] => key1
            [1] => key2
            [2] => key3
        )

    [2] => Array
        (
            [0] => val1
            [1] => val2
            [2] => val3
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM