我有一个文件,其中包含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
函数。目的只是学术性的。任何帮助将不胜感激。
答案 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
所以,你想要的一切都在第一个捕获组内。这是获取内容的一种肮脏方式,但根据您提到的没有不同内容的保证,这应该可以正常工作。