2011-09-19 174 views
0

我有一个正则表达式应该匹配一些形式的字符串:src =“/ blkjad.dafsdf”>。它看起来像这样:(src | href)(\ s *)?=(\ s *)?(\“| \')/([^ /]。*?)\ 4.双引号不匹配(蛋糕)PHP正则表达式

在我正在运行的一个站点上罚款,它在另一个站点上失败,建立在Cake中。这里是另一个失败的Regex =>'/(“)/',它应该与该行中的任何双引号匹配。

我现在亏本了。我工作的一位高级开发人员只是看了一眼,基本上摇了摇头。不幸的是,我并不熟悉Cake,我似乎无法在网上找到任何类似的问题。有任何想法吗?

编辑:对于记录,失败的正则表达式使用preg_match_all,而其他(相同/工作正则表达式)使用preg_replace。这里有一些相关的代码。

$regex['php'] = '/(src|href)(\s*)?=(\s*)?(\"|\')\/([^\/].*?)\4/'; 

$php = htmlspecialchars(file_get_contents(sprintf('/home/x/x/x/x/x/%s.%s', $string, $extension)));             echo $php; 

if (preg_match_all($regex['php'], $php, $out)){ 
    echo sizeof($out); 
    echo nl2br(print_r($out, true)); 
} else { 
    echo 'Doesn\'t work'; 
} 
+0

如何粘贴一些相关的代码?这个正则表达式被传递到Cake-framework函数中吗?还是使用preg_ *系列功能?您几乎没有提供可能有助于解决问题的上下文信息。 – Xorlev

+0

谢谢。第一篇文章。 – yatakaka

+0

您还可以添加一些失败的测试输入和预期输出吗? – Xorlev

回答

1

我认为问题来自htmlspecialchars()调用。

PHP documentation

执行的翻译说是:

  • '&'(符号)变成 '&'
  • '“'(双引号)变为 '"'
  • 未设置ENT_NOQUOTES时,“'”(单引号)仅为'''
  • 当ENT_QUOTES设置。 '<'(小于)成为 '<' '>'(大于 比)变为 '>'
+0

哇!谢谢。非常愚蠢的疏忽。 – yatakaka