模式修饰符

s: 点号通配模式

文本文件string

i'm liuyibao.
i'm 25.

PHP代码

$str = file_get_contents('./string');echo $str;
if(preg_match('/.*/s', $str, $matches)){
    print_r($matches);
}

运行结果

i'm liuyibao. i'm 25.
Array ( [0] => i'm liuyibao. i'm 25. ) 

由此可以看出点号通配模式可以匹配换行符。

假如PHP代码是这样的,即去掉模式修饰符s

$str = file_get_contents('./string');echo $str;
if(preg_match('/.*/', $str, $matches)){
    print_r($matches);
}

运行结果如下,即不能匹配换行符及之后的字符串

i'm liuyibao. i'm 25.
Array ( [0] => i'm liuyibao. ) 

转自 ‘精通正则表达式P119’: 如果所使用的工具能够在多行文本中进行搜索,请务必注意点号,它在通常情况下不能匹配换行符. P111有详细点号通配模式的介绍

m : 增强的行锚点模式

文本文件string同上,PHP代码如下:

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^/', '###', $str);
echo $str2;

运行结果如下:

i'm liuyibao. i'm 25.
###i'm liuyibao. i'm 25.

可见只有行首的起始被替换为###

PHP代码改成增强的行锚点模式,如下

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^/m', '###', $str);
echo $str2;

运行结果如下:

i'm liuyibao. i'm 25.
###i'm liuyibao. ###i'm 25.

可见文本内所有的行起始位置都被替换为###

下面将string改为如下,即增加了一个空行:

i'm liuyibao.

i'm 25.

PHP代码改为如下,即将空行替换为###:

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^$/', '###', $str);
echo $str2;

运行结果如下,即没能替换:

i'm liuyibao. i'm 25.
i'm liuyibao. i'm 25.

改为增强模式:

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^$/m', '###', $str);
echo $str2;

运行结果如下,成功替换:

i'm liuyibao. i'm 25.
i'm liuyibao. ### i'm 25.

转自: ‘精通正则表达式‘ P112,通常情况下,锚点^不能匹配字符串内部的换行符,而只能匹配目标字符串的起始位置。但是在增强模式下,它能够匹配字符串内嵌的文本行的开头位置,$也是如此

支持此模式的程序通常还提供了 \A 和 \Z , 它们的作用与普通的 ^ 和 $ 一样,只是在此模式下它们的意义不会发生变化。也就是说 \A 和 \Z 永远不会匹配字符串内部的换行符。

模式修饰符

时间: 2024-10-28 20:14:10

模式修饰符的相关文章

正则表达式模式修饰符

下面列出了当前可用的 PCRE 修饰符.括号中提到的名字是 PCRE 内部这些修饰符的名称. 模式修饰符中的空格,换行符会被忽略,其他字符会导致错误. i (PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符 (^) 仅匹配字符串的开始位置, 而"行末"元字符 ($) 仅匹配字符串末尾,

PHP正则表达式模式修饰符 /i, /is, /s, /isU等

模式修饰符 下面列出了当前可用的 PCRE 修饰符.括号中提到的名字是 PCRE 内部这些修饰符的名称. 模式修饰符中的空格,换行符会被忽略,其他字符会导致错误. i (PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符 (^) 仅匹配字符串的开始位置, 而"行末"元字符 ($) 仅匹配字

PHP正则表达式模式修饰符详解

PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误导别人,所以今天我把这个文档整理出来,供大家参考. 模式修正符号 功能描述 i 在和正则匹配是不区分大小写 m 将字符串视为多行.默认的正则开始“^”和结束“$”将目标字条串作为一单一的一“行”字符(甚至其中包括换行符也是如此).如果在修饰符中加上“m”,那么开始和结束将会指点字符串的每一行的开头就

正则表达式中的模式修饰符

Perl风格的正则表达式允许把单个字符选项(标志)放在正则表达式模式后面来修改匹配的解释或行为.例如,要进行不区分大小写的匹配,可以简单地使用i标志:preg_match('/cat/i', 'Stop, Catherine!');        // returns true返回true表4-12显示了在Perl兼容正则表达式中支持的来自Perl的修饰符:表4-12:Perl标志修饰符 意 义/regexp/i 不区分大小写的匹配/regexp/s 使句点(.)匹配任何字符,包括换行符(\n)

关于php正则表达式模式修饰符

一直以来,以为自己的正则表达式学的还算可以(基本工作上遇到的问题都能解决),但有时候却是知其然而不知其所以然,在网上看到这篇文章,解释了之前的很多疑问,记录下来,随时温故而知新. i (PCRE_CASELESS) 如果设置了这个修饰符, 模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下, PCRE认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符(^)仅匹配字符串的开始位置, 而"行末"元字符($

PHP正则表达式 /i, /s, /x,/u, /U, /A, /D, /S等模式修饰符

i (PCRE_CASELESS) 如果设置了这个修饰符, 模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下, PCRE认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), "行首"元字符(^)仅匹配字符串的开始位置, 而"行末"元字符($)仅匹配字符串末尾, 或者最后的换行符(除非设置了D修饰符). 这个行为和perl相同. 当这个修饰符设置之后, "行首"和"行末"就会匹配

Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

(一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开发和维护,所有Java中的类是只能单继承,通过接口来实现多继承:对于接口的话,是可以多继承的,例如:A接口可以同时继承接口B和接口C,但是有一点要注意,就是实现接口A的类必须要实现接口A.B.C中所有的抽象方法:接口之所以可以多继承,就是因为接口结构比较简单. 继承是通过extends关键字来实现,

javascript正则表达式修饰符之multiline(/m)的使用

javascript正则表达式有3种修饰符/i./m和/g./i是我们最常用,也是最好理解的,代表正则表达式匹配的时候不区分大小写. var regex = /abc/i; alert(regex.test("aBc"));//true /m代表多行模式multiline,如果目标字符串中不含有换行符\n,即只有一行,那么/m修饰符没有任何意义. var multiline = /abc/m; var singleline = /abc/; //目标字符串不含换行符\n var tar

面向对象编程(OOP)————修饰符

一.类的修饰符 Java语言中的权限修饰符主要包括private.public和protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问.如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能在本类中被使用,在子类中是不可见的,并且对其他包的类也是不可见的.如果将类的成员变量和成员方法的访问权限设置为public,则除了可以在本类使用这些数据之外,还可以在子类和其它包中的类中使用.如果一个类的访问权限被设置为private,这个类将隐藏其内的所有数据,以免用户直接