我有一个像这样的字符串
var str = 'abcd [[test search string]] some text here ]]';
Run Code Online (Sandbox Code Playgroud)
我试过这样的
* preg_match("/\[\[test.*\]\]/i",$str,$match);
Run Code Online (Sandbox Code Playgroud)
如果我执行此操作,我将获得如下所示的输出
[[test search string]] some text here ]]
Run Code Online (Sandbox Code Playgroud)
我想要的第一场比赛就像
[[test search string]]
Run Code Online (Sandbox Code Playgroud)
可能吗?
Tho*_*s F 11
简短回答:是的,你可以.你需要使用惰性量词.而不是
preg_match("/[[test.*]]/i",$str,$match);
Run Code Online (Sandbox Code Playgroud)
使用
preg_match("/\[\[test.*?\]\]/i",$str,$match);
Run Code Online (Sandbox Code Playgroud)
使功能在第一场比赛时停止.注意:如果要匹配文字[或]字符,则需要将它们转义为:\[或\].
在php.net上进行了一些研究后,我发现了一个模式修饰符U(PCRE_UNGREEDY),它将模式的默认值设置为懒惰,因为它与贪婪相关.
所以这意味着
preg_match("/\[\[test.*\]\]/iU",$str,$match);
Run Code Online (Sandbox Code Playgroud)
也适合这个目的.该U修改将使所有*,+,?在正则表达式匹配尽可能少的字符越好.此外,曾经不合格(*?,+?和??)的量词现在将变得贪婪(尽可能多地匹配字符).
| 归档时间: |
|
| 查看次数: |
7374 次 |
| 最近记录: |