我有以下模式和主题
$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);
我不能,因为上帝的爱,弄清楚什么是错的!请有人可以指导我如何做到这一点?谢谢
答案 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"]
不匹配。