正则表达式 - PHP中的分隔符问题

时间:2010-12-14 20:19:52

标签: php regex extraction

我正在尝试从以下内容中提取src属性:[attname src =“http://example.org”] somecontent [attname src =“http://www.example.com”]

我现在拥有什么:
preg_match_all('#attname src=".*[^"]#', $buffer, $bufferarr);

然而它不起作用 - 在第二个"之后没有停止,结果如下:attname src="http://example.org"] somecontent [attname src="http://www.example.com

3 个答案:

答案 0 :(得分:2)

默认情况下,+*是“贪婪的” - 他们会尽可能多地吞噬字符。这就是为什么你得到的比你想要的多。如果您向他们添加?+?*?),他们将不会贪婪,并会尽快停止。

你的regexp看起来也错了。它应该是#attname src="[^"]*?"#

答案 1 :(得分:1)

preg_match_all('#attname src="([^"]*)"#', $buffer, $bufferarr);

答案 2 :(得分:0)

不是最好的解决方案,但无论如何它完成了工作:

$str = '[attname src="http://example.org"] somecontent [attname src="http://www.example.com"]';
preg_match_all('/attname src=\"(.*?)\"/', $str, $match);
var_dump($match);