PHP正则表达式 /i, /is, /s, /isU等

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 正则表达式基础与使用 #### 什么是正则表达式正则表达式(Regular Expression,简称Regex或RegExp)是一种强大的工具,用于模式匹配、字符串检索、替换以及验证等操作。它能够帮助开发者高效地处理复杂的数据结构和文本内容[^3]。 #### PHP 支持的正则表达式类型 PHP 提供了两种主要的正则表达式接口: 1. **基于 POSIX 的扩展正则表达式**:通过 `ereg` 和 `eregi` 系列函数实现。 2. **基于 Perl 的兼容正则表达式 (PCRE)**:这是目前推荐使用的标准,提供了更高的性能和更多的功能支持,常用函数有 `preg_match`, `preg_replace`, `preg_split` 等。 #### 基本语法与修饰符 在 PHP 中,正则表达式通常被包裹在一个分隔符之间,最常用的分隔符是斜杠 `/` 或其他字符如 `#`。例如: ```php /pattern/flags ``` 其中: - `pattern` 是实际的正则表达式模式; - `flags` 是可选的修饰符,用于调整匹配行为。常见的修饰符包括: - `i`: 不区分大小写匹配; - `m`: 多行模式下允许 `^` 和 `$` 匹配每一行的开头和结尾; - `s`: 单行模式下使点号 `.` 能够匹配换行符; - `U`: 非贪婪模式匹配[^1]。 #### 示例代码展示 以下是几个典型的 PHP 正则表达式应用场景及其对应的代码示例: ##### 1. 字符串匹配 检测一个字符串是否符合特定模式,比如电子邮件地址校验: ```php $email = "example@example.com"; $pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/"; if (preg_match($pattern, $email)) { echo "Email is valid."; } else { echo "Invalid email format."; } ``` 此代码片段利用 PCRE 函数 `preg_match()` 来判断输入邮箱的有效性[^2]。 ##### 2. 替换子字符串 将 HTML 标签中的属性值提取出来并转换成大写字母形式: ```php $html = '<img src="image.jpg" alt="description">'; $pattern = '/(src|alt)="([^"]*)"/'; $result = preg_replace_callback( $pattern, function ($matches) { return strtoupper($matches[1]) . '="' . strtoupper($matches[2]) . '"'; }, $html ); echo $result; // 输出:<IMG SRC="IMAGE.JPG" ALT="DESCRIPTION"> ``` 这里展示了如何结合回调函数完成动态数据变换的任务。 ##### 3. 切割字符串 按照逗号或者空白分割一段文字为多个部分: ```php $string = "apple, banana , orange "; $pattern = '/\s*,\s*/'; // 定义分隔符为任意数量空格加逗号再加更多空格 $array = preg_split($pattern, trim($string)); print_r($array); // 结果数组 ['apple', 'banana', 'orange'] ``` 上述例子说明了怎样灵活运用 `preg_split()` 方法来解析不规则间隔的内容。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值