PHP删除HTML中JS代码正则表达式

 更新时间:2016年11月25日 17:42  点击:2100
以前有分享过一个专用的过滤html标签的php函数了,但给很多人转载了最近搜索了一下发现有些问题,现在我只要过滤js代码了,下面来看一个正则过滤吧。

js代码正则

 代码如下 复制代码

<script[^>]*?>.*?</script>'si", // 去掉 javascript

起初使用,m代表多行匹配,测试多次单行可以替换,多行没效果。

 代码如下 复制代码

preg_replace('/<script.*?<\/script>/m', '', $html);

原来.不匹配换行,添加s修饰符正常:

 代码如下 复制代码

preg_replace('/<script.*?<\/script>/ms', '', $html);

例子 利用tidy_parse_file工具

 代码如下 复制代码

<?php
$options = array("indent" => true,      
     "indent-spaces" => "4",  
     "wrap" => 4096);       
$tidy = tidy_parse_file("/edit-table.html", $options);//此处改成你要处理的文档URL
tidy_clean_repair($tidy);
echo $tidy;
?>

今天在一个群里看到一个站长在问如何把一段字符串中指定两个字符串这间的内容提取出来,这个我是想用于做文章分页标签了,但后来测试多个标题此方法暂时不行,单个撮是没有问题的。

例子,

 代码如下 复制代码
<?php
$fcontents ="fdsafdafdsa{page}中国要呀{/page}dafdsafdsafdsafdsa";
if(eregi("{page}(.*){/page}", $fcontents,$regs)){
 //echo "成功";
//print_r($regs);
 echo $regs[1];
}
else{
 echo "失败";
}
exit;
?>

输出结果

中国要呀

那么我们如果测试放多个标签会怎么样呢

 代码如下 复制代码

<?php

$fcontents ="fdsafdafdsa{page}中国要呀{/page}dafdsafdsafdsafdsa{page}你好中国{/page}fdsafdsafsda{page}我爱中国{/page}fdafdsa";
if(eregi("{page}(.*){/page}", $fcontents,$regs)){
 //echo "成功";
//print_r($regs);
 echo $regs[1];
}
else{
 echo "失败";
}


exit;
?>

输出结果

中国要呀{/page}dafdsafdsafdsafdsa{page}你好中国{/page}fdsafdsafsda{page}我爱中国

发现这个闭合会有问题了,暂时还没想到办法。

下面来给大家分享一个正则神器 VerbalExpressionsPhp使用例子,有兴趣的同学不防进入参考一下吧。

该类库是jehna/VerbalExpressions的php版本。

这货的竟然通过链式方法把正则给语义化了。。。我表示很愤慨啊。。。

安装

 代码如下 复制代码

加入composer.json

{
    "require": {
        ...,
        "markwilson/VerbalExpressionsPhp": "dev-master"
    }
}

使用

 代码如下 复制代码
<?php
 
require_once 'vendor/autoload.php';
 
use MarkWilson\VerbalExpression;
use MarkWilson\VerbalExpression\Matcher;
 
// 初始化VerbalExpression实例
$verbalExpression = new VerbalExpression();
 
// URL地址匹配
$verbalExpression->startOfLine()
                 ->then('http')
                 ->maybe('s')
                 ->then('://')
                 ->maybe('www.')
                 ->anythingBut(' ')
                 ->endOfLine();
 
// 编译表达式 - 返回: ^(http)(s)?(\:\/\/)(www\.)?([^\ ]*)$
$verbalExpression->compile();
 
// 执行匹配
preg_match($verbalExpression, 'http://www.111cn.net'); // 返回 1
// 或
$matcher = new Matcher();
$matcher->isMatch($verbalExpression, 'http://www.google.com'); // 返回 true

嵌套表达式

 代码如下 复制代码
<?php
 
$innerExpression = new VerbalExpression();
$innerExpression->word();
 
$outerExpression = new VerbalExpression();
$outerExpression->startOfLine()
                ->find($innerExpression)
                ->then($innerExpression)
                ->endOfLine();
 
// 返回 ^(\w+)(\w+)$
$outerExpression->compile();

禁用子模式捕获

默认情况下,子匹配规则可以被获取,并返回匹配的数组。

 代码如下 复制代码
<?php
 
// 禁用获取子匹配规则
$verbalExpression->disableSubPatternCapture()->word(); // (?:\w+)
// 或
$verbalExpression->word(false); // (?:\w+)

这样做只会影响后续增加的表达式;任何已经添加的匹配规则不会受到影响。这里允许禁用和启用组。

 代码如下 复制代码

<?php
 
// 相当于 (\w+)(?:\w+)(?:\w+)(\w+)
$verbalExpression->word()
                 ->disableSubPatternCapture()
                 ->word()
                 ->word()
                 ->enableSubPatternCapture()
                 ->word();

自己写了一个匹配图片路径的正则,总是有点不兼容,有些图片的路径获取不到,在网上找了半天,总算找到一个完美的。

例子

 代码如下 复制代码

$preg = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/i";

preg_match_all($preg,$str,$res);


这下子,管用多了,不管怎样的代码结构,都能顺利的匹配出图片的路径。
例子

 代码如下 复制代码

$str='<p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_4.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_3.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>';
 
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/";
 
preg_match_all($pattern,$str,$match);
 
print_r($match);

最后总结一个下载远程图片地址

 代码如下 复制代码

/**
* 提取字符串中图片url地址
* @param type $str
* @return type
*/
function getimgs($str) {
    $reg = '/((http|https):\/\/)+(\w+\.)+(\w+)[\w\/\.\-]*(jpg|gif|png)/';
    $matches = array();
    preg_match_all($reg, $str, $matches);
    foreach ($matches[0] as $value) {
        $data[] = get_file($value);
    }
    return $data;
}

下面整理的正则匹配html标签的例子都是在网上找了,不过这一篇是非常的全面的并且包括了html中各种标签了,具体有多少我不说我可以告诉你所有的html都可以匹配出来哦。
正则表达式
<(\S*?) [^>]*>.*?</\1>|<.*? />
匹配 <html>hello</html>|<a>abcd</a>
不匹配 abc|123|<html>ddd

 

正则表达式
^[^<>`~!/@\#}$%:;)(_^{&*=|'+]+$
匹配 This is a test
不匹配 <href = | <br> | That's it

 

正则表达式
&lt;!--.*?--&gt;
匹配 &lt;!-- &lt;h1&gt;this text has been removed&lt;/h1&gt; --&gt; | &lt;!-- yada --&gt;
不匹配 &lt;h1&gt;this text has not been removed&lt;/h1&gt;

 

正则表达式
(\[(\w+)\s*(([\w]*)=('|&quot;)?([a-zA-Z0-9|:|\/|=|-|.|\?|&amp;]*)(\5)?)*\])([a-zA-Z0-9|:|\/|=|-|.|\?|&amp;|\s]+)(\[\/\2\])
匹配 [link url=&quot;http://www.domain.com/file.extension?getvar=value&amp;secondvar=value&quot;]Link[/li
不匹配 [a]whatever[/b] | [a var1=something var2=somethingelse]whatever[/a] | [a]whatever[a]

 

正则表达式
href=[\"\'](http:\/\/|\.\/|\/)?\w+(\.\w+)*(\/\w+(\.\w+)?)*(\/|\?\w*=\w*(&\w*=\w*)*)?[\"\']
匹配 href="www.yahoo.com" | href="http://localhost/blah/" | href="eek"
不匹配 href="" | href=eek | href="bad example"

 

正则表达式
&quot;([^&quot;](?:\\.|[^\\&quot;]*)*)&quot;
匹配 &quot;This is a \&quot;string\&quot;.&quot;
不匹配 &quot;This is a \&quot;string\&quot;.

 

正则表达式
(?i:on(blur|c(hange|lick)|dblclick|focus|keypress|(key|mouse)(down|up)|(un)?load|mouse(move|o(ut|ver))|reset|s(elect|ubmit)))
匹配
 
onclick | onsubmit | onmouseover
不匹配 click | onandon | mickeymouse

 

正则表达式
(?s)/\*.*\*/
匹配 /* .................... */ | /* imagine lots of lines here */
不匹配 */ malformed opening tag */ | /* malformed closing tag /*

 

正则表达式
<(\S*?) [^>]*>.*?</\1>|<.*? />
匹配 <html>hello</html>|<a>abcd</a>
不匹配 abc|123|<html>ddd

 

正则表达式
\xA9
匹配 ©
不匹配 anything

 

正则表达式
src[^&gt;]*[^/].(?:jpg|bmp|gif)(?:\&quot;|\')
匹配 src=&quot;../images/image.jpg&quot; | src=&quot;http://domain.com/images/image.jpg&quot; | src='d:\w
不匹配 src=&quot;../images/image.tif&quot; | src=&quot;cid:value&quot;

 

正则表达式
/\*[\d\D]*?\*/
匹配 /* my comment */ | /* my multiline comment */ | /* my nested comment */
不匹配 */ anything here /* | anything between 2 seperate comments | \* *\

 

正则表达式
<[a-zA-Z]+(\s+[a-zA-Z]+\s*=\s*("([^"]*)"|'([^']*)'))*\s*/>
匹配 <img src="test.gif"/>
不匹配 <img src="test.gif"> | <img src="test.gif"a/>
[!--infotagslink--]

相关文章

  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • 常用C#正则表达式汇总介绍

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • C# 中使用正则表达式匹配字符的含义

    正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • Python验证的50个常见正则表达式

    这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • js用正则表达式筛选年月日的实例方法

    在本篇文章里小编给大家整理的是一篇关于js用正则表达式筛选年月日的实例方法,对此有兴趣的朋友们可以学习下。...2021-01-04