[英]PHP Regex matches pattern separately on the same line
我正在嘗試使用php regex解析文本。 我寫了一個符合所有條件的模式匹配。 我不想要這個。 它必須在同一行上分別匹配目標。
模式:
/\((?P<type>\w+)((,)*(?P<params>[\d\w\:]+))((,)*(?P<comment>.*))\)/u
目標數據字符串:
lorem ipsum dolor (photo,61) test (photo,62,some text) (video,63) sit amet etc
結果為preg_match_all和PREG_SET_ORDER標志:
array (size=1)
0 =>
array (size=11)
0 => string '(photo,61) test (photo,62,some text) (video,63)' (length=47)
'type' => string 'photo' (length=5)
1 => string 'photo' (length=5)
2 => string ',61' (length=3)
3 => string ',' (length=1)
'params' => string '61' (length=2)
4 => string '61' (length=2)
5 => string ') test (photo,62,some text) (video,63' (length=37)
6 => string '' (length=0)
'comment' => string ') test (photo,62,some text) (video,63' (length=37)
7 => string ') test (photo,62,some text) (video,63' (length=37)
如果目標數據放在單獨的行中,並且執行相同的正則表達式模式,則結果為; (我想要這些結果,但沒有換行)
lorem ipsum dolor
(photo,61) test
(photo,62,some text)
(video,63) sit amet etc
array (size=3)
0 =>
array (size=11)
0 => string '(photo,61)' (length=10)
'type' => string 'photo' (length=5)
1 => string 'photo' (length=5)
2 => string ',61' (length=3)
3 => string ',' (length=1)
'params' => string '61' (length=2)
4 => string '61' (length=2)
5 => string '' (length=0)
6 => string '' (length=0)
'comment' => string '' (length=0)
7 => string '' (length=0)
1 =>
array (size=11)
0 => string '(photo,62,some text)' (length=20)
'type' => string 'photo' (length=5)
1 => string 'photo' (length=5)
2 => string ',62' (length=3)
3 => string ',' (length=1)
'params' => string '62' (length=2)
4 => string '62' (length=2)
5 => string ',some text' (length=10)
6 => string ',' (length=1)
'comment' => string 'some text' (length=9)
7 => string 'some text' (length=9)
2 =>
array (size=11)
0 => string '(video,63)' (length=10)
'type' => string 'video' (length=5)
1 => string 'video' (length=5)
2 => string ',63' (length=3)
3 => string ',' (length=1)
'params' => string '63' (length=2)
4 => string '63' (length=2)
5 => string '' (length=0)
6 => string '' (length=0)
'comment' => string '' (length=0)
7 => string '' (length=0)
謝謝你的幫助。
我發現一個解決方案不影響換行符(根本解決方案是在不使用“ /.../”的情況下以“〜...〜”括起來)
~\((\w+),([\d|:]+),*(.*?)\)~u
命名版本;
~\((?P<type>\w+),(?P<params>[\d|:]+),*(?P<comment>.*?)\)~u
感謝@Uchiha前置解決方案,也感謝您提供的提示。
'~\(.*?\)~'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.