簡體   English   中英

使用正則表達式獲取所有匹配項?

[英]Get all matches with pure regex?

我正在使用PHP,需要解析如下所示的字符串:

Rake (100) Pot (1000) Players (andy: 10, bob: 20, cindy: 70)

我需要使用名稱獲取每位玩家的抽佣,底池和抽佣貢獻。 玩家人數是可變的。 只要我能以一致的方式將玩家姓名與佣金貢獻相匹配,順序就無關緊要。

例如,我正在尋找這樣的東西:

Array
(
    [0] => Rake (100) Pot (1000) Players (andy: 10, bob: 20, cindy: 70)
    [1] => 100
    [2] => 1000
    [3] => andy
    [4] => 10
    [5] => bob
    [6] => 20
    [7] => cindy
    [8] => 70
)

我能夠提出一個匹配字符串的正則表達式,但它只返回最后一個玩家佣金貢獻對

^Rake \(([0-9]+)\) Pot \(([0-9]+)\) Players \((?:([a-z]*): ([0-9]*)(?:, )?)*\)$

輸出:

Array
(
    [0] => Rake (100) Pot (1000) Players (andy: 10, bob: 20, cindy: 70)
    [1] => 100
    [2] => 1000
    [3] => cindy
    [4] => 70
)

我試過使用preg_match_all和g修飾符,但沒有成功。 我知道preg_match_all可以讓我得到我想要的東西,如果我只想要玩家-佣金貢獻對,但是在此之前我還需要數據。

顯然,我可以自己使用explode並解析數據,但是在走那條路線之前,我需要知道是否/如何使用純正則表達式可以完成此操作。

您可以使用以下正則表達式,

(?:^Rake \(([0-9]+)\) Pot \(([0-9]+)\) Players \(|)(\w+):?\s*(\d+)(?=[^()]*\))

演示

| 第一個非捕獲組的最后一個字符使用正則捕獲組后面的模式幫助正則表達式引擎匹配剩余字符串中的字符。

我將使用以下正則表達式來驗證輸入字符串:

^Rake \((?<Rake>\d+)\) Pot \((?<Pot>\d+)\) Players \(((?:\w*: \d*(?:, )?)+)\)$

然后,只需在最后一個捕獲組上使用explode()函數將玩家分開即可:

preg_match($regex, $string, $matches);
$players = explode(', ', $matches[2]);

暫無
暫無

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

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