0
我正在處理包含特殊標誌形式爲「{X}」或「{XX}」的文本數據,其中X可以是任何字母數字字符。當這些標記相鄰或分開時,將爲這些標記指定特殊含義。我需要一個正則表達式來匹配相鄰的標誌並分隔組中的每個標誌。與preg_match_all匹配的嵌套模式(正則表達式和PHP)
對於實施例,給出下面的輸入:
{B}{R}: Target player loses 1 life.
{W}{G}{U}: Target player gains 5 life.
輸出應該近似:
("{B}{R}",
"{W}{G}{U}")
("{B}",
"{R}")
("{W}",
"{G}",
"{U}")
我的PHP代碼被適當地返回鄰道陣列,但分割陣列僅包含最後每組匹配標記:
$input = '{B}{R}: Target player loses 1 life.
{W}{G}{U}: Target player gains 5 life.';
$pattern = '#((\{[a-zA-Z0-9]{1,2}})+)#';
preg_match_all($pattern, $input, $results);
print_r($results);
輸出:
Array
(
[0] => Array
(
[0] => {B}{R}
[1] => {W}{G}{U}
)
[1] => Array
(
[0] => {B}{R}
[1] => {W}{G}{U}
)
[2] => Array
(
[0] => {R}
[1] => {U}
)
)
感謝您的幫助!
這裏沒有實際的嵌套,只是重複。除非我誤解,否則你只是想分解每個令牌。然後刪除'+'和外部parens,讓'preg_match_all'每個單獨返回。 //當然,如果您想在輸入流文本中找到出現的內容,請使用原始方法,並在第二次運行中重新處理它。用一個PCRE調用分解它是不可行的,缺少指定一組有限的可選標記發生'(\ {\ w})?(\ {\ w})?(\ {\ w})?'。 – mario
那麼我想分出每個組「{B} {R}」和「{W} {G} {U}」。我還想在單獨的數組中分別標出每個標誌「{B}」,「{R}」,「{W}」,「{G}」和「{U}」。我想唯一的辦法是運行兩個正則表達式。 – skibulk