preg_match似乎总是返回0个匹配

时间:2011-11-13 13:36:29

标签: php preg-match preg-match-all

我有以下模式和主题

$pattern = "\[item\s*id=['\"](.*?)['\"]\s*\]";
$subject = "[item id=\"40\"]";

基本上,我想从字符串[item id =“30”]

中获取id属性

我已经在不同的preg_match / preg_match_all网站上测试了我的模式和主题,他们都返回了正确的匹配。

但是,我写的以下代码似乎总是为匹配返回NULL。

preg_match_all($pattern, $subject, $matches);
var_dump($matches);

我不能,因为上帝的爱,弄清楚什么是错的!请有人可以指导我如何做到这一点?谢谢

3 个答案:

答案 0 :(得分:2)

你缺少分隔符

Warning: preg_match_all(): Delimiter must not be alphanumeric or backslash in /data/1.php on line 4 NULL 

所以$pattern应该是

$pattern = "~\[item\s*id=['\"](.*?)['\"]\s*\]~"; 

返回

array(2) { [0]=> array(1) { [0]=> string(14) "[item id="40"]" } [1]=> array(1) { [0]=> string(2) "40" } } 

答案 1 :(得分:2)

确保使用正确的delimiters。此外,this site在调试方面非常有用。

答案 2 :(得分:1)

尝试这个:

$pattern = '/\[item\s+id=[\'"](.*)[\'"]\s*\]/';

例如:

<?php
$pattern = '/\[item\s+id=[\'"](.*)[\'"]\s*\]/';
$subject = "[item id=\"40\"]";
preg_match_all($pattern, $subject, $matches);
echo $matches[1][0]; # => 40
?>

您必须使用正确的分隔符(/…/),\s+应该比\s*更合适,因此它与[itemid="2"]不匹配。