要使用正则匹配任意字符的话,通常有以下几种方法,这里我分别对每一种方法在使用的过程中做一个总结:

第一种方式:[.\n]*?
示例

? PHP
preg_match_all('/<div class="list">[.\n]*?<\/div>/i', $content, $data);

按道理这种方式应该是可以的,但我测试发现不行,因为这里中括号里面的“.”被当作一个普通的英文句号去处理了,而不是通配符,因此这里只能匹配到包含英语句号及换行符在内的任意内容了。

第二种方式:.*?
示例

? PHP
preg_match_all('/<div class="list">.*?<\/div>/is', $content, $data);

这种方式是没问题的,但要记得后面加的/s修正符。

第三种方式:(.|\n)*?
示例

? PHP
preg_match_all('/<div class="list">(?:.|\n)*?<\/div>/i', $content, $data);

与第一种方式相比,这里的“.”不会被当作普通字符处理,而是真正期望的通配符了,如此说来这种方式也没问题,但我在测试中发现,当要匹配的字符串 内容有点长的时候就不行了,再更换至高版本的php环境下去测试则正常,由此得出这应该跟php所绑定的PCRE库版本有关了。

第四种方式:[\s\S]*?
示例

? PHP
preg_match_all('/<div class="list">[\s\S]*?<\/div>/i', $content, $data);

这种方式完全没问题,我在windows及linux环境下测试都通过,在各个常见的php版本下测试也通过。

最后还有一点需要注意的是,linux环境下是有\n(换行符)而没有\r(回车符)的,而windows环境下通常是\r\n(回车换行)连在一起的,测试匹配时得留意这个细节差异。

关于php中正则匹配包括换行符在内的任意字符的问题总结的更多相关文章

  1. ruby正则匹配回车换行符

    如果你使用/^.*$/这种正则是匹配不到回车换行符的. 所以应该像下面这么写: /^[\s\S]*$/

  2. EXECL中怎么中把换行符换成任意字符

    作文本处理的时候,数据是从execl中拷贝出来的,但是execl中是带有格式的. 导出到txt文本中的时候会出现换行,不满足一行一条数据的要求. 公式 =SUBSTITUTE(A1,),"A ...

  3. python中正则匹配之re模块

    Python中正则表达式 re:re是提供正则表达式匹配操作的模块 一.什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某个模式匹配,Python 自1.5版本起 ...

  4. java 去html标签,去除字符串中的空格,回车,换行符,制表符

    public static String getonerow(String allLine,String myfind)     {                           Pattern ...

  5. Perl字符集[\d\D]表示任何字符(所有数字和非数字,包括换行符),“.”表示除了换行符以外的所有字符。

    Perl字符集[\d\D]表示任何字符(所有数字和非数字,包括换行符),“.”表示除了换行符以外的所有字符.

  6. Perl:理解正则中“.”可匹配出回车符(“\n”)外任意字符的例子,配合 $^I 关键字

    要把下面文件的内容改了, Program name: graniteAuthor: Gilbert BatesCompany: RockSoftDepartment: R&DPhone: +1 ...

  7. grep中正则匹配的使用

    如要匹配Computer或computer两个单词,可做如下操作: [Cc]mputer “.”允许匹配ASCII集中任意字符,或为字母,或为数字. 使用\{\}匹配模式结果出现的次数 匹配字母A出现 ...

  8. Java中正则匹配性能测试

    工作中经常会用到在文本中每行检索某种pattern,刚才测试了三种方式,发现实际性能和预想的有区别 方式1: 直接字符串的matches方法,[string.matches("\\d+&qu ...

  9. Python中splitlines方法判断文本中一行结束除了回车换行符是否还有其他字符?

    Python中splitlines([keepends])方法用于返回由原字符串中各行组成的列表,在行边界的位置拆分. 如果keepends=True,结果列表中包含行边界,否则不包含 行边界的字符. ...

随机推荐

  1. C语言中数据类型取值范围的计算的理解与总结

    c语言中,数据类型有short,int,long,char,float,double,然后除了浮点型只有 有符号数(signed)外,其他的数据类型都分为有符号(signed)和无符号(unsigne ...

  2. yield个人理解及简明示例

    1.写法有2种:yield return <expression>和yield breakyield用于在迭代中返回一个值,并将值带入下一次迭代中.yield break则意味着停止迭代. ...

  3. ubuntu下基于sqlite3后台的php环境的搭建

    最近准备把公司的服务器换成linux 数据库sqlite3 搭建过程记录如下: 1 sqlite3安装.. apt-get install sqlite 2.PHP服务器搭建. apt-get ins ...

  4. mysql Can't connet MySQL server to '@localhost'

    10063/10060/10038好像都能解决 mysql -nt -remove mysql -nt install

  5. Rserve, java调用R源文件

    Rserve安装和加载: install.packages("Rserve") library("Rserve") Rserve()   java调用: REn ...

  6. ios category,protocol理解

    category: 向现有的类中增加方法,同时提供方法的实现,现有类不需要做任何改动. protocol:(相当于Java或C#中的接口interface,当很多类都要需要类似的方法,但是方法具体实现 ...

  7. 编程范式 episode 6 实现stack 栈功能_ to do

    //既然在这里开始,那就在这里结束. 实现stack 功能 ____coding _using subfunction to focus on the main aim of current func ...

  8. SQL Server - select语句练习

    创建表和输入数据 CREATE TABLE STUDENT(SNO VARCHAR(3) NOT NULL,   SNAME VARCHAR(4) NOT NULL,   SSEX VARCHAR(2 ...

  9. POJ 1113 - Wall 凸包

    此题为凸包问题模板题,题目中所给点均为整点,考虑到数据范围问题求norm()时先转换成double了,把norm()那句改成<vector>压栈即可求得凸包. 初次提交被坑得很惨,在GDB ...

  10. Quartus 的管脚分配

    与管脚分配相关的一些功能在assignments菜单下, Remove assignments... Back-Annotate Assignment... Import Assignment... ...