正则表达式测试器表示表达式有效,但preg_match失败

时间:2013-11-30 05:04:24

标签: php regex preg-match

我正在尝试从字符串中提取em标签。在http://www.phpliveregex.com/我的正则表达式有效但在我的代码中它返回0(找不到匹配项)。

$regex = "/<em class=\"correct_response\".*\/em>/";
echo preg_match($regex, $string);
/* sample values for the data in $string are 

    toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class="correct_response">3M</em><br /><br /> <table width="100%"><tr><td class="right">Ashok</td></tr></table>')
    toggle('clue_J_2_2', 'clue_J_2_2_stuck', '<em class="correct_response">Confucius</em><br /><br /><table width="100%"><tr><td class="right">Ashok</td></tr></table>')

*/

我做错了什么?感谢。

2 个答案:

答案 0 :(得分:0)

你需要转义逃避/em>中正斜杠的反斜杠,因为你用双引号分隔你的字符串。

$regex = "/<em class=\"correct_response\".*\\/em>/";

这只是一个问题,因为您的字符串使用双引号。以下使用单引号也应该可以工作,并且需要更少的字符:

$regex = '/<em class="correct_response".*\/em>/';

如果您不想担心必须逃避正斜杠,可以使用#之类的其他delimiters

$regex = '#<em class="correct_response".*/em>#';

答案 1 :(得分:0)

您正在使用正确的正则表达式!我刚测试也确认了。

你做错了的是你使用preg_match函数的方式。

阅读PHP手册。

这是完整的测试代码,只需将其复制粘贴并在空白的php文件中尝试:

<?php
$regex = "/<em class=\"correct_response\".*\/em>/";
$string = "toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=\"correct_response\">3M</em><br /><br /> <table width=\"100%\"><tr><td class=\"right\">Ashok</td></tr></table>')";
preg_match($regex,$string,$matches);
echo $matches[0];
?>