php 模式修正符,php正则表达式中常用的模式修正符

模式修正符是用来扩展正则匹配的, 意思是可以开辟更多的匹配空间或者是修正一些匹配模式,在有的语言中的正则没有这个模式修正符,因为我最近正在学习php,所以本篇说的就是php中的环境。前面我们知道了,模式修正符是被用来修饰正则匹配模式的,也可以说扩展正则匹配,它是被用到定界符之外的,如果不和正则配合使用,就是普通的字母。 那就来看几个常见的模式修正符。

1. i 匹配大小写(不区分大小写)

比如我们要匹配一段话, 这段话里既有小写, 又有大写, 而我们模式里匹配的只有小写, 就可以通过加模式修正符i的方式让他同时匹配大小写。

/*

不区分大小写匹配

*/

$p = "/imfinal/i";

$s = "thisisAImFinAltesta";

$result = preg_match($p,$s,$arr);

print_r($arr);

当然, 在不存在模式修正符的语言里, 我们还可以这样

/*

不区分大小写匹配

*/

$p = "/im\wfinal/";

$s = "thisisAImFinAltesta";

$result = preg_match($p,$s,$arr);

print_r($arr);

一样是匹配的到的

2. m 匹配多行 (把一行的每个段落都当作一个新行)

/*

把每一个段落当成一行匹配

*/

$p = "/^abc/im";

$s = "dfssadg

dsafa

QWW

WDWQFD

abw

addf

abc

www

Abc

";

$result = preg_match_all($p,$s,$arr);

print_r($arr);

匹配abc开头, 因为使用了i和m修饰, 就会忽略大小写和把每一一个换行都当成一个新行匹配,因为用了all, 所以会匹配出所有解决, abc Abc。

3. s 匹配单行, 把所有的段落当成一个匹配, 如果存在.就匹配换行符

/*

把所有段落当成一行匹配,如果这个时候模式里用了.就会重新匹配换行符,因为修正符里使用了s已经把字符串修正成了一行。

*/

$p = "/^ab.+c/is";

$s = "abcdfssadg

dsafa

QWW

WDWQFD

abw

addf

abc

www

Abc

";

$result = preg_match_all($p,$s,$arr);

print_r($arr);

4. A 匹配必须以什么开头(和^同义)

$p = "/abc/imA";

$s = "abcalsdfkjadf

abc

Abcdfegfwr

aaaaafd

aBc

dsccdvc

aaaabc";

if(preg_match_all($p,$s,$arr))

{

print_r($arr);

}

i不区分大小写, m把每一个段落都当成一个新行匹配, A表示必须以abc开头, 要注意的是,这里只会匹配第一行,因为强制要求了abc开头, 所以这里实际上又把它当成了一行。

5. x 忽略正则匹配模式中的空格

$p = "/a b c/imx";

$s = "aaaddfsdgfthisisaabcsfdf";

if(preg_match_all($p,$s,$arr))

{

print_r($arr);

}

6. e 只能在preg_replace中使用, 该函数原型

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

增加e修饰符会导致replacement被以php代码形式执行,因为这个造成了很多安全上的问题, 新版本的php中已被官方废弃。 举个例子, 比如:

$string = 'This is a test';

$pattern = '/\w+\s+(\w+)\s\w+\s\w+/ie';

$replacement = $_GET["s"];

echo preg_replace($pattern, $replacement, $string);

给get参数提供一个参数phpinfo()将会导致一个代码执行漏洞。 preg_replace函数的意思是, 进行一个正则替换, 如果匹配到了string, 就执行替换replacement里的内容。

参考 http://php.net/manual/zh/function.preg-replace.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值