正则表达式:不尊重最短路径
我想解析这样的内容:
{{word1|word2|word3|word4|...}}
{{word1|word2|word3}}
...
使用 preg_match_all
。 我只需要前 3 个单词,所以我制作了这个正则表达式:
/\{\{(.*)\|(.*)\|(.*)[\|.*]?\}\}/Uim
但是当有 4 个或更多单词时,第三个捕获组采用 word3|word4|...
我期望 U< /code> 修饰符采用最短路径,所以我不知道我在这里做错了什么。有人可以帮我吗?
I want to parse something like this:
{{word1|word2|word3|word4|...}}
{{word1|word2|word3}}
...
with preg_match_all
.
I just need the 3 first words, so I made this regex:
/\{\{(.*)\|(.*)\|(.*)[\|.*]?\}\}/Uim
But when there are 4 words or more, the third capturing group takes word3|word4|...
I expected the U
modifier to take the shortest path, so I don't know what I'm doing wrong here. Can someone help me please ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一种可能性:
解释:
One possibility:
Explanation:
试试这个:
.*
也需要|
所以它匹配word1|word2...
edit:
更好的版本:
Try this:
.*
takes|
too so it matchesword1|word2...
edit:
better version:
在这里试试这个
在 Regexr 上查看
因为您不搜索字母,所以不需要修饰符
i
,没有锚点^
或$
,因此不需要修饰符m
。我在这里使用了[^|]
,它在设计上是不贪婪的,所以不需要U
。Try this here
See it here on Regexr
Since you don't search for letters, so you don't need the modifier
i
, no anchors^
or$
so no modifierm
is needed. I used here[^|]
which is ungreedy by design, so noU
needed.