用于从 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);
看看为什么我们应该转义美元符号两次
有效:-)
我正在使用 正则表达式代码查找任何 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);
看看为什么我们应该转义美元符号两次
有效:-)