我想解析这样的事情:
{{word1|word2|word3|word4|...}}
{{word1|word2|word3}}
...
preg_match_all
。
我只需要3个第一个单词,所以我制作了这个正则表达式:
/\{\{(.*)\|(.*)\|(.*)[\|.*]?\}\}/Uim
但是当有4个或更多单词时,第三个捕获组需要word3|word4|...
我希望U
修饰符采用最短路径,所以我不知道我在这里做错了什么。有人能帮帮我吗?
答案 0 :(得分:3)
一种可能性:
\{\{([^|]*)\|([^|]*)\|([^|]*)(?:\||\}\})
说明:
\{\{ # Two of {{
([^|]*) # Any characters until '|'
\| # Character '|'
([^|]*) # Any characters until '|'
\| # Character '|'
([^|]*) # Any characters until '|'
(?:\||\}\}) # A vertical bar, or two }}, without grouping.
答案 1 :(得分:2)
试试这个:
/^\{\{([^|]+)\|([^|]+)\|([^|]+)/im
.*
也需要|
,因此它与word1|word2...
匹配
修改强>
更好的版本:
preg_match_all('/^{{([^|}]+)\|([^|}]+)\|([^|}]+)/m', "{{word1|word2|word3|word4|...}}\n{{word5|word6|word7}}", $matches, PREG_SET_ORDER);
var_dump($matches)
答案 2 :(得分:1)
在这里试试
/\{\{([^|]*)\|([^|]*)\|([^|]*).*\}\}/
由于您不搜索字母,因此您不需要修饰符i
,也不需要锚点^
或$
,因此不需要修饰符m
。我在这里使用的[^|]
设计不合适,所以不需要U
。