美文网首页PHPPHP开发
PHP正则处理遇到的几个问题

PHP正则处理遇到的几个问题

作者: zhou | 来源:发表于2016-03-30 17:55 被阅读239次

首先给出几个问题。

  1. 将html代码中的js内容过滤掉。

  2. 将html代码中table标签中间的内容(<table>内容</table>)前后加上特殊字符#。

  3. 取出img标签alt属性的值。

html代码如下:

<html>
<head>
       <title>test</title>
</head>
<body>
       <script type="text/javascript">
              data = 'test data';
       </script>
       <p><img src="http://test.com/1.jpg" alt="this's a description."></p>
       <table>....</table>
       <p><img src='http://test.com/2.jpg' alt='other'></p>
       <script>
              console.log('statics');
       </script>
</body>
</html>

第一个问题,很容易写出下面代码:

$html = preg_replace('~<script.*>.+</script>~U', '', $html);

但执行的时候发现并没有过滤掉js代码。

原因是点号(.)元字符匹配除换行符以外的任意字符。js代码是多行的,所以用点号无法匹配,这个坑很浅,我却掉进去了。

解决方法:使用模式修饰符s,此修饰符可以让点号匹配换行符。

$html = preg_replace('~<script.*>.+</script>~Us', '', $html);

执行结果:


第二问题,可以使用php的preg_replace_callback函数。

$html = preg_replace_callback(
    '~<table>(.+)</table>~Us',
    function ($matches) {
        return '#' . $matches[1] . '#';
    },
   $html);

第三个问题:

preg_match_all('~<img.*alt=[\'"](.+)[\'"]~U', $html, $matches);

执行结果:

发现第一个匹配出错。由于alt属性值可能由双引号或单引号包括的,所以在正则中使用[\’”],但如果alt属性值中有单引号或双引号就会匹配不全,此时可以使用反向引用来解决,好吧,我竟然忘了反向引用。

preg_match_all('~<img.*alt=([\'"])(.+)\1~U', $html, $matches);

相关文章

  • PHP正则处理遇到的几个问题

    首先给出几个问题。 将html代码中的js内容过滤掉。 将html代码中table标签中间的内容( 内容 )前后加...

  • 《PHP Learning》模板引擎

    《PHP Learning》模板引擎 模板处理使用正则处理模板替换规则保存模板编译结果 模板使用 自定义模板引擎 ...

  • PHP常用正则表达式汇总

    PHP常用正则表达式汇总 正则表达式在 PHP 中的应用在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正...

  • 正则表达式

    学习正则表达式之前我们得先想几个问题, 正则是干什么的?为什么要用正则?怎么去使用正则?带着这几个问题一起来开始...

  • php正则处理图片的src

    经常我们遇到的src是相对路径需要改为绝对路径可以如此 测试正则效果的网站https://regex101.com...

  • 9.1.1 选择PHP正则表达式的处理函数库

    9.1.1 选择PHP正则表达式的处理函数库 正则表达式简介:正则表达式是用于描述字符排列和匹配模式的一种语法规则...

  • regexp

    正则表达式RE 重要的文本处理工具:vim、sed、awk、grep mysql、oracle、php、pytho...

  • PHP想入门? 看这个就够了

    本文将介绍PHP的一些较重要的内容。包括:面向对象编程、正则表达式、程序错误处理、XML、AJAX、图像处理、My...

  • PHP处理Excel时间

    前言 在扩展客服导单的时候,遇到了 PHP 处理 Excel 时间的问题。处理并记录一下。 问题 PHP 获取到的...

  • 一. PHP入门篇和PHP进阶篇

    PHP基础语法 PHP数组 PHP函数 PHP之类和对象 PHP字符串 PHP之正则表达式 PHP之cookie ...

网友评论

  • 莫一兮:第二个替换函数,挺不错,例子很好
  • 46f4d7b5cc21:本以为很简单,原来坑还挺多

本文标题:PHP正则处理遇到的几个问题

本文链接:https://www.haomeiwen.com/subject/zxcelttx.html