用于从 html 文件中检索 jquery 函数的正则表达式在 PHP 服务器上不工作

Regex for retrieving jquery functions from html file not working on PHP server

我正在使用 正则表达式代码查找任何 html 文件中使用的 jquery 函数。 php代码是:

<?php
$file=<<<FOO
<html>
<body>
    <div class="content">
        <div class="main-content">
            <ul class="show-sport">
                <li class="active"><img src="assets/img/show-1.png"/></li>
                <li><img src="assets/img/show-2.png"/></li>
                <li><img src="assets/img/show-3.png"/></li>
            </ul>
        </div>
    <script>
        $('.show-sport').fadeSlider({speed:5000});
        $('.modal-switch').modal();
    </script>
    </div>
</body>
</html>
FOO;
preg_match_all("/$\('(.*)'\).(.*)\((.*)\)/", $file, $jQuery_func);
var_dump($jQuery_func);
?>

$file 稍后将存储文件内容。 这是我得到的输出:

array (size=4)
  0 => 
    array (size=0)
      empty
  1 => 
    array (size=0)
      empty
  2 => 
    array (size=0)
      empty
  3 => 
    array (size=0)
      empty

但是当我在任何其他在线 php 正则表达式测试器上测试它时,它给出:

Array
(
    [0] => Array
        (
            [0] => $('.show-sport').fadeSlider({speed:5000})
            [1] => $('.modal-switch').modal()
        )

    [1] => Array
        (
            [0] => .show-sport
            [1] => .modal-switch
        )

    [2] => Array
        (
            [0] => fadeSlider
            [1] => modal
        )

    [3] => Array
        (
            [0] => {speed:5000}
            [1] => 
        )
)

您可以在此处查看结果 http://www.phpliveregex.com/p/9fo单击 preg_match_all 选项卡

PHP 版本:5.4.16 |阿帕奇版本:2.4.4

我已经多次撞到头了,但无法将其设置为在本地主机上工作。是否需要启用任何 PHP 扩展才能使其正常工作?

刚做了一些调试

您 php 中的正则表达式与在线 link 页面中的正则表达式不同 :-) (或者我不知道为什么 :-) 一定是不同的)

所以只需更改您的正则表达式模式:

preg_match_all("/$\('(.*)'\).(.*)\((.*)\)/", $file, $jQuery_func);

preg_match_all("/\$\('(.*)'\).(.*)\((.*)\)/", $file, $jQuery_func);

$pattern = "/\$\('(.*)'\).(.*)\((.*)\)/";
                var_dump($pattern);
                    preg_match_all($pattern, $file, $jQuery_func);

看看为什么我们应该转义美元符号两次

有效:-)