Php 正则表达式只匹配一次
我有一个正则表达式,它应该将Php 正则表达式只匹配一次,php,html,regex,Php,Html,Regex,我有一个正则表达式,它应该将[img]foo.bar[/img]重写为,事实上,它确实如此。当字符串中有两个或多个[img]url.ext[/img]时,问题就出现了。而不是分别匹配每一个,它匹配第一个 [IMG] 和最后的 [/IMG] < /代码>,并将中间的URL和标记作为 SRC < /代码>的一部分。我的php代码是$newstring=preg\u replace('%\[img\](.+)\[/img\]%',''.$string) 一个有效的例子是正则表达式是。试试看,也就是说
[img]foo.bar[/img]
重写为
,事实上,它确实如此。当字符串中有两个或多个[img]url.ext[/img]
时,问题就出现了。而不是分别匹配每一个,它匹配第一个<代码> [IMG] 和最后的<代码> [/IMG] < /代码>,并将中间的URL和标记作为<代码> SRC < /代码>的一部分。我的php代码是$newstring=preg\u replace('%\[img\](.+)\[/img\]%',''.$string)代码>
一个有效的例子是正则表达式是。试试看,也就是说
preg_replace('%\[img\](.+?)\[/img\]%', '<img src=${1}>', $string);
preg\u replace('%\[img\](.+?)\[/img\]%',''.$string);
(请注意,?
在+
之后)默认情况下,+
运算符是,您需要使用+?
进行非贪婪匹配
$str = preg_replace('~\[img]\s*(.+?)\s*\[/img]~i', '<img src="$1">', $str);
\[img\](.+?)\[/img\]
$str=preg\u replace('~\[img]\s*(.+?)\s*\[/img]~i','''$str);
注意:我提出上述建议-建议使用I
标志进行不区分大小写的匹配。使用+?
而不是+
进行非贪婪匹配
$str = preg_replace('~\[img]\s*(.+?)\s*\[/img]~i', '<img src="$1">', $str);
\[img\](.+?)\[/img\]
演示
+
将匹配多个事件中的一个。结合?
,它将尽可能少地匹配(惰性)。可能重复的