通过php中的reqular表达式匹配jquery函数

时间:2015-12-29 19:49:48

标签: php regex preg-match preg-match-all

我有一个文件,其中包含jquery代码到head部分,如下所示..

<head>
<script>
$(document).ready(function(){
    $('.x').click(function(){
        // some thing
    });
    $('.y').click(function(){
        // some thing
    });
});
</script>
</head>

我想使用PHP来读取文件并使用$(document).ready(function(){之类的正则表达式检索位于preg_match_all部分内的内容。更具体地说我需要两个.click函数。目的只是学术性的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

\$\((?!document\).ready).*?\}\);

这是表达式的作用:

  • \$\( - 这会查找文字符号$,后跟左括号(
  • (?!document\).ready) - 这是一个负面的预测,表示document).ready无法关注$(
  • .*? - 点.允许任何字符匹配,星号*允许该字符匹配任意次,问号?使它不合适并告诉它在碰到表达式的下一部分时停止匹配。结束括号。
  • \}\); - 最后一部分只是结束标记。它将使用文字结束大括号},然后是右括号)和分号;作为字符串的结尾。

当然,由于你匹配了这么多REGEX保留字符,我们最终会得到五个斜杠。

无论如何,如果你把它放到preg_match_all上下文中,你最终会得到这样的结果:

preg_match_all('~\$\((?!document\).ready).*?\}\);~sim', $string, $matches);
print "<pre>"; print_r($matches[0]); print "</pre>";

输出:

Array
(
    [0] => $('.x').click(function(){
        // some thing
    });
    [1] => $('.y').click(function(){
        // some thing
    });
)

这是一个有效的演示。 http://ideone.com/R1t5P5

答案 1 :(得分:0)

请参阅this regex

<head>\s*<script> # Anchor your regex to these tags
  \s*\$\(\h*document\h*\)\.ready\( # Match the beginning statement
    ([\S\s]+) # Grab the content you want
  \);\s* # Match the ending statement
<\/script> # Anchor the last closing tag to prevent over-matching

所以,你想要的一切都在第一个捕获组内。这是获取内容的一种肮脏方式,但根据您提到的没有不同内容的保证,这应该可以正常工作。