preg_match PHP的问题

时间:2011-12-24 00:32:37

标签: php preg-match

我有一个字符串:

$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)中找不到匹配,尽管它显然在那里......

关于我在这里做错什么的任何想法?

3 个答案:

答案 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]