0

我有一个正则表达式应该匹配以下形式的某些字符串:src="/blkjad.dafsdf">。它看起来像这样:(src|href)(\s*)?=(\s*)?(\"|\')/([^/].*?)\4.

虽然这在我正在运行的一个站点上运行良好,但在另一个内置于 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';
 }
4

1 回答 1

1

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

PHP 文档中所述

执行的翻译是:

  • '&'(和号)变为 '&'
  • '"' (双引号) 变成 '"'
  • 当 ENT_NOQUOTES 未设置时。"'" (单引号)仅变为 '''
  • 当 ENT_QUOTES 设置时。'<' (小于)变成 '<' '>' (大于)变成 '>'
于 2011-09-19T15:53:04.540 回答