Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式只匹配一次_Php_Html_Regex - Fatal编程技术网

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\]
演示

+
将匹配多个事件中的一个。结合
,它将尽可能少地匹配(惰性)。

可能重复的