正则的模式修饰符使用详解

这次给大家带来正则的模式修饰符使用详解,使用正则模式修饰符的注意事项有哪些,下面就是实战案例,一起来看一下。

i (PCRE_CASELESS)

如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。

m (PCRE_MULTILINE)

默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行), “行首”元字符 (^) 仅匹配字符串的开始位置, 而”行末”元字符 ($) 仅匹配字符串末尾, 或者最后的换行符(除非设置了 D 修饰符)。这个行为和 perl 相同。 当这个修饰符设置之后,“行首”和“行末”就会匹配目标字符串中任意换行符之前或之后,另外, 还分别匹配目标字符串的最开始和最末尾位置。这等同于 perl 的 /m 修饰符。如果目标字符串 中没有 “” 字符,或者模式中没有出现 ^ 或 $,设置这个修饰符不产生任何影响。

s (PCRE_DOTALL)

如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个 修饰符,点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类比如 [^a] 总是匹配换行符,而不依赖于这个修饰符的设置。

x (PCRE_EXTENDED)

如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略, 并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符 等同于 perl 中的 /x 修饰符,使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 (?( 引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中如果出现空白字符会导致编译错误。 比如(?(就会导致错误)。

e (PREG_REPLACE_EVAL)

Warning

本特性已自 PHP 5.5.0 起废弃。强烈建议不要使用本特性。

如果设置了这个被弃用的修饰符, preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估执行(eval 函数方式),并使用执行结果 作为实际参与替换的字符串。单引号、双引号、反斜线()和 NULL 字符在 后向引用替换时会被用反斜线转义.

Caution

The addslashes() function is run on each matched backreference before the substitution takes place. As such, when the backreference is used as a quoted string, escaped characters will be converted to literals. However, characters which are escaped, which would normally not be converted, will retain their slashes. This makes use of this modifier very complicated.

Caution

请确保 replacement 参数由合法 php 代码字符串组成,否则 php 将会 在preg_replace() 调用的行上产生一个解释错误。

Caution

Use of this modifier is discouraged, as it can easily introduce security vulnerabilites:

<?php$html = $_POST['html'];// uppercase headings$html = preg_replace('((.*?))e','"" . strtoupper("$2") . ""',$html);

登录后复制

The above example code can be easily exploited by passing in a string such as

{${eval($_GET[php_code])}}

. This gives the attacker the ability to execute arbitrary PHP code and as such gives him nearly complete access to your server.

To prevent this kind of remote code execution vulnerability the preg_replace_callback() function should be used instead:

<?php$html = $_POST['html'];// uppercase headings$html = preg_replace_callback('((.*?))',function ($m) {return "" . strtoupper($m[2]) . ""},$html);

登录后复制

Note:

仅 preg_replace() 使用此修饰符,其他 PCRE 函数忽略此修饰符。

A (PCRE_ANCHORED)
如果设置了这个修饰符,模式被强制为”锚定”模式,也就是说约束匹配使其仅从 目标字符串的开始位置搜索。这个效果同样可以使用适当的模式构造出来,并且 这也是 perl 种实现这种模式的唯一途径。
D (PCRE_DOLLAR_ENDONLY)
如果这个修饰符被设置,模式中的元字符美元符号仅仅匹配目标字符串的末尾。如果这个修饰符 没有设置,当字符串以一个换行符结尾时, 美元符号还会匹配该换行符(但不会匹配之前的任何换行符)。 如果设置了修饰符m,这个修饰符被忽略. 在 perl 中没有与此修饰符等同的修饰符。
S
当一个模式需要多次使用的时候,为了得到匹配速度的提升,值得花费一些时间 对其进行一些额外的分析。如果设置了这个修饰符,这个额外的分析就会执行。当前, 这种对一个模式的分析仅仅适用于非锚定模式的匹配(即没有单独的固定开始字符)。
U (PCRE_UNGREEDY)
这个修饰符逆转了量词的”贪婪”模式。 使量词默认为非贪婪的,通过量词后紧跟? 的方式可以使其成为贪婪的。这和 perl 是不兼容的。 它同样可以使用 模式内修饰符设置 (?U)进行设置, 或者在量词后以问号标记其非贪婪(比如.*?)。
Note:

在非贪婪模式,通常不能匹配超过 pcre.backtrack_limit 的字符。

X (PCRE_EXTRA)
这个修饰符打开了 PCRE 与 perl 不兼容的附件功能。模式中的任意反斜线后就 ingen 一个 没有特殊含义的字符都会导致一个错误,以此保留这些字符以保证向后兼容性。 默认情况下,在 perl 中,反斜线紧跟一个没有特殊含义的字符被认为是该字符的原文。 当前没有其他特性由这个修饰符控制。
J (PCRE_INFO_JCHANGED)
内部选项设置(?J)修改本地的PCRE_DUPNAMES选项。允许子组重名, (译注:只能通过内部选项设置,外部的 /J 设置会产生错误。)
u (PCRE_UTF8)
此修正符打开一个与 perl 不兼容的附加功能。 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高,win32版 php 4.2.3 开始可用。 php 4.3.5 开始检查模式的 utf-8 合法性。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

正则表达式的d元字符使用详解(附代码)

Linux中使用正则表达式的详细介绍

以上就是正则的模式修饰符使用详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2777649.html

(0)
上一篇 2025年3月8日 15:11:38
下一篇 2025年3月8日 15:11:49

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 正则表达式m修饰符(多行匹配)使用详解

    这次给大家带来正则表达式m修饰符(多行匹配)使用详解,使用正则表达式m修饰符(多行匹配)的注意事项有哪些,下面就是实战案例,一起来看一下。 正则表达式m修饰符: m修饰符规定正则表达式可以执行多行匹配。m修饰符的作用是修改^和$在正则表达式…

    编程技术 2025年3月8日
    200
  • 大小写不敏感的i修饰符使用详解

    这次给大家带来大小写不敏感的i修饰符使用详解,使用大小写不敏感i修饰符的注意事项有哪些,下面就是实战案例,一起来看一下。 正则表达式i修饰符: i修饰符用来规定正则表达式的匹配是大小写不敏感的。 语法结构: 构造函数方式: new RegE…

    编程技术 2025年3月8日
    200
  • 正则全局匹配模式g修饰符的使用详解

    这次给大家带来正则全局匹配模式g修饰符的使用详解,使用正则全局匹配模式g修饰符的注意事项有哪些,下面就是实战案例,一起来看一下。 正则表达式g修饰符: g修饰符用语规定正则表达式执行全局匹配,也就是在找到第一个匹配之后仍然会继续查找。 语法…

    编程技术 2025年3月8日
    200
  • 正则表达式的{n,m}量词如何使用

    这次给大家带来正则表达式的{n,m}量词如何使用,正则表达式{n,m}量词使用的注意事项有哪些,下面就是实战案例,一起来看一下。 正则表达式{n,m}量词: {n,m}量词可以重复前面匹配的字符n-m次,至少n次,最多m次。 语法结构:构造…

    2025年3月8日
    200
  • 正则的数字验证详解(附代码)

    这次给大家带来,的注意事项有哪些,下面就是实战案例,一起来看一下。 第一部分:数值验证 1.验证只包含数字、指定长度(N)的字符串 比如我要验证只包含数字,长度为6的字符串,如123456,则可以使用下面几种效果相同的验证方式 d{6}[0…

    2025年3月8日 编程技术
    200
  • 使用MUi框架的WebService接口详解

    这次给大家带来使用MUi框架的WebService接口详解,使用MUi框架WebService接口的注意事项有哪些,下面就是实战案例,一起来看一下。 实例如下所示: mui.init(); mui.plusReady(function() …

    编程技术 2025年3月8日
    200
  • js回调详解

    本文主要和大家介绍js回调详解,在用js时候,刚接触了个回调,差点把自己饶进去,好再出来了,现在屡屡思路。 先来个简单的代码: var rows = [{name:”123″},{name:”456″}];var each = functi…

    编程技术 2025年3月8日
    200
  • js实现模糊查询实例详解

    本文主要和大家分享jjs实现模糊查询实例详解,主要以代码的方式和大家分享,希望能帮助到大家。 1、简述 实现模糊查询方法有很多种,后端可以实现,前端使用js也可以实现。 后端实现起来需要根据输入框中搜索的关键字,去后台拼接SQL语句查询。 …

    编程技术 2025年3月8日
    200
  • Ajax实现跨域请求的步骤详解

    这次给大家带来Ajax实现跨域请求的步骤详解,Ajax实现跨域请求的注意事项有哪些,下面就是实战案例,一起来看一下。 下面我们在本地建两个站点演示一下 第一步首先我们在本地搭建好一个Apache服务器;下载地址; 第二步服务器配置好以后,在…

    2025年3月8日 编程技术
    200
  • Ajax的实现异步刷新详解

    这次给大家带来Ajax的实现异步刷新详解,Ajax实现异步刷新的注意事项有哪些,下面就是实战案例,一起来看一下。 所谓的异步刷新,就是不刷新整个网页进行更新数据。 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数…

    2025年3月8日
    200

发表回复

登录后才能评论