Php preg_match似乎总是返回0个匹配项

Php preg_match似乎总是返回0个匹配项,php,preg-match,preg-match-all,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); va

我有以下模式和主题

$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);

看在上帝的份上,我搞不清楚到底出了什么问题!拜托,有人可以指导我怎么做?谢谢

您缺少分隔符

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" } } 

您缺少分隔符

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" } } 
不妨这样做:

$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”]
之类的内容不匹配,请尝试以下操作:

$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”]
之类的内容不匹配。请确保使用正确的分隔符。此外,它对调试非常有帮助。

请确保使用正确的。另外,它对调试也很有帮助。

@我想这应该是最好的答案,因为在正确的语法中,
&
id
之间的空格数不应该等于零。@我想这应该是最好的答案,因为在正确的语法中,
item
id
之间的空格数不应等于零。