我有一个字符串:
$str="(94896)content is here(/94896)(94897)content is here(/94897)(94898)content is here(/94898)(94899)content is here(/94899)";
(number)
和(/number)
充当标记,以便从字符串中删除某些内容。
我有一个preg_match
来取出内容:
if(preg_match('/(94896)\"(.*)\"(\/94896)/',$str,$c)) {echo "I found the content, its:".$co[1];}
现在由于某种原因,它在字符串($str
)中找不到匹配,尽管它显然在那里......
关于我在这里做错什么的任何想法?
答案 0 :(得分:2)
你需要从你的正则表达式字符串中取双引号,因为它们不出现在$ str中,但是正则表达式是预期的。
'/(94896)\"(.*)\"(\/94896)/'
// ^^ ^^
// These aren't in the string.
编辑:我认为您还需要转义括号,因为它们将被视为分组运算符,而非实际括号。
你的表达应该是:
'/\(94896\)(.*)\(\/94896\)/'
答案 1 :(得分:1)
括号用于正则表达式以表示子模式。如果要在字符串中搜索这些字符,则必须将其转义:
preg_match('/\(94896\)(.*)\(\/94896\)/',$str,$c)
如果找到模式:
echo "I found the content, its:".$c[0];
哦,正如Karl Nicoll所说,为什么你的模式中有引用?
答案 2 :(得分:0)
匹配所有内容:
$str="(94896)content is here(/94896)(94897)content is here(/94897)(94898)content is here(/94898)(94899)content is here(/94899)";
$re = '/\((\d+)\)(.*)\(\/\1\)/';
preg_match_all($re, $str, $matches,PREG_SET_ORDER);
var_dump($matches);
号码位于$matches[*][1]
,内容位于$matches[*][2]
。