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
之间的空格数不应等于零。