当前位置: 首页 > 编程笔记 >

浅谈PHP正则表达式中修饰符/i, /is, /s, /isU

东方弘壮
2023-03-14
本文向大家介绍浅谈PHP正则表达式中修饰符/i, /is, /s, /isU,包括了浅谈PHP正则表达式中修饰符/i, /is, /s, /isU的使用技巧和注意事项,需要的朋友参考一下

在学习PHP正则表达式修饰符之前先来理解下贪婪模式,前面在元字符中提到过"?"还有一个重要的作用,即"贪婪模式",什么是"贪婪模式"呢?

PHP正则表达式贪婪模式

比如我们要匹配以字母"a"开头字母"b"结尾的字符串,但是需要匹配的字符串在"a"后面含有很多个"b",比如"a bbbbbbbbbbbbbbbbb",那正则表达式是会匹配第一个"b"还是最后一个"b"呢?如果你使用了贪婪模式,那么会匹配到最后一个"b",反之只是匹配到第一个"b"。

PHP正则表达式贪婪模式使用实例

/a.+?b/  
/a.+b/U

对比不使用贪婪模式的实例如下:

/a.+b/ 

上面使用了一个修饰符U,详见关于修饰符的介绍。

PHP正则表达式 /i, /is, /s, /isU等 都是些什么东西呢?
 
i 不区分大小写
 
s 模式中的圆点元字符(.)匹配所有的字符,包括换行符
 
x 模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两 头,也都被忽略
 
A (PCRE_ANCHORED) 如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配即自动在模式开头加上^。
 
D (PCRE_DOLLAR_ENDONLY) 如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配 任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。  S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。
 
U (PCRE_UNGREEDY) 本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符来启用此选项。
 
X (PCRE_EXTRA) 此 修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将 来扩充。默认情况下,和 Perl 一样,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。即:贪婪模式,最 大限度匹配 如:/a[\w]+?e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,则匹配abce  u (PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。

PHP正则表达式修饰符的理解

在PHP正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着"e"并不等于"E")。

PHP正则表达式修饰符的种类及介绍:

◆i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。

◆m:默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。

◆s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!

◆x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。

◆e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。

◆A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。

◆E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。

◆U:和问号的作用差不多,用于设置"贪婪模式"。

PHP正则表达式修饰符的相关内容就向你介绍到这里,希望对你了解和掌握PHP正则表达式修饰符有所帮助。

 类似资料:
  • 本文向大家介绍PHP正则表达式 /i, /is, /s, /isU等介绍,包括了PHP正则表达式 /i, /is, /s, /isU等介绍的使用技巧和注意事项,需要的朋友参考一下 PHP正则表达式 /i, /is, /s, /isU等 都是些什么东西呢? i 不区分大小写 s 模式中的圆点元字符(.)匹配所有的字符,包括换行符 x 模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义

  • 主要内容:实例,实例,实例,实例标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。 标记不写在正则表达式里,标记位于表达式之外,格式如下: 下表列出了正则表达式常用的修饰符: 修饰符 含义 描述 i ignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 g global - 全局匹配 查找所有的匹配项。 m multi line - 多行匹配 使边界字符 ^ 和 $ 匹配

  • 但我对修饰语s和m感到困惑。谁能用代码示例来解释s和m之间的区别,说明它是如何不同的?我试着在网上搜索,它只在http://perldoc.perl.org/perlre.html#modifiers链接中给出了解释。在stackoverflow中,我甚至看到有人将s和m一起使用。s不是M的反义词吗? 我无法使用“使用M”匹配多行。

  • 问题内容: 我正在使用orient-db数据库,但是正则表达式模式匹配存在问题。我确实需要在请求中包含不区分大小写的修饰符,但是它不按预期工作。 询问: 以小写形式返回预期的匹配项。 每当我尝试添加修饰符时,即在分隔符之外 我得到一个空的收藏。实际上,只要存在分隔符,查询就会返回一个空集合。 如果没有办法附加修饰符,我可能可以将每个“ alpha”字符替换为方括号中的表达式,即 但是我对这种解决方

  • 本文向大家介绍浅谈C#中正则表达式的使用,包括了浅谈C#中正则表达式的使用的使用技巧和注意事项,需要的朋友参考一下 目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex、Match、Group等)。那么,什么是正则表达式,怎么定义正则表达

  • 是 i = 表达式;等于i =表达式,那么登录的目的是什么? 大家好,我对下面这个问题很困惑;i =表达式;//意味着i = i表达式那么这个i =表达式呢;//我在eclipse上进行了测试,简单地找到了结果i = expression 所以 i = 表达式;等于 i = 表达式 那么登录的目的是什么? 我知道黑白 i(前增量)和 i(后增量)的区别 谢谢你!