PHP编程
完成条件
正则表达式
语法
常见的正则表达式
字符 | 类型 | 解释 |
---|---|---|
. | 点号 | 任意字符 |
[...] | 方括号 | 字符类:类中列举的所有字符 |
[^...] | 方括号加脱字符 | 补充类:所有除列举字符外的字符 |
^ | 脱字符 | 字符串或行的开始 |
$ | 美元符号 | 字符串或行的结束 |
| | 管道符 | 选择 |
(...) | 圆括号 | 捕获组:也用于限定选择的范围 |
* | 星号 | 0、1 或多个出现 |
+ | 加号 | 1 或多个出现 |
? | 问号 | 0 或 1 次出现 |
POSIX 字符类
类别 | 含义 |
---|---|
[[:alpha:]] | 任意字母 |
[[:digit:]] | 任意数字 |
[[:xdigit:]] | 十六进制字符 |
[[:alnum:]] | 任意字母或数字 |
[[:space:]] | 任意空白字符 |
[[:punct:]] | 任意标点字符 |
[[:lower:]] | 任意小写字母 |
[[:upper:]] | 任意大写字母 |
[[:blank:]] | 空格或制表符 |
[[:graph:]] | 可显示和打印的字符 |
[[:cntrl:]] | 控制字符 |
[[:print:]] | 可打印字符,除控制字符外 |
Unicode 正则表达式
表达式 | 含义 |
---|---|
\A | 字符串开始 |
\b | 单词的开始或结束 |
\d | 数字 |
\D | 非数字 |
\s | 空白字符 |
\S | 非空白字符 |
\w | 字母、数字或下划线 |
\W | 非字母、数字或下划线 |
\X | Unicode 字符 |
\z | 字符串结束 |
调试工具: https://regex101.com/
?::
忽略捕获组的编号。例如:((?:ignored_substring|other).)
?!:
否定选择。例如:((?!excluded_substring).)
$1:
表示第一个捕获组的结果。- 注意:如果要搜索美元符号
"$"
,不能使用"\$"
,因为它会被解析为变量格式。正确的写法是使用单引号:'\$'
。
在 PHP 中,正则表达式模式必须始终被分隔符符号包围。通常使用反引号(`),但也可以使用斜杠(/)和井号(#)。
此外,我们可以在分隔符后添加一些选项:
i
:忽略大小写m
:使.
匹配换行符x
:忽略空格o
:只处理第一个匹配u
:统计 Unicode 字符(多字节)
正则表达式的研究
自 PHP 5.3 以来,ereg()
函数被 preg_match()
替代,用于执行正则表达式搜索。
preg_match()
preg_match()
是执行正则表达式匹配的主要函数。它返回一个布尔值,并要求两个必需的参数:正则表达式模式和要扫描的字符串。
第三个参数是存储结果数组的变量。
第四个参数是一个 PHP 标志,用于修改函数的基本行为。
最小示例:
<?php
$string = 'PHP regex test for the English Wikibooks.';
if (preg_match('`.*Wikibooks.*`', $string)) {
print('This texts talks about Wikibooks');
} else {
print('This texts doesn\'t talk about Wikibooks');
}
?>
高级示例:
<?php
$string = 'PHP regex test for the English Wikibooks.';
if (preg_match('`.*Wikibooks.*`', $string), $results, $flag) {
var_dump($results);
} else {
print('This texts doesn\'t talk about Wikibooks');
}
?>
标志示例:
PREG_OFFSET_CAPTURE
:显示匹配子串在字符串中的位置。PREG_GREP_INVERT
:在preg_grep()
中显示反向匹配。
preg_grep()
此函数用于在数组中进行搜索。
preg_match_all()
要在一个数组中获取所有匹配的结果,可以将 preg_match
替换为 preg_match_all()
,并使用 print_r()
打印。
示例:过滤文件内容:
$regex = "/\(([^)]*)\)/";
preg_match_all($regex, file_get_contents($filename), $matches);
print_r($matches);
替换
preg_replace()
该函数接受三个参数:要替换的字符串和替换的字符串。
<?php
// 将空格替换为下划线
$string = "PHP regex test for the English Wikibooks.";
$sortedString = preg_replace('`( )`', '_', $string);
echo $sortedString;
?>
preg_filter()
与 preg_replace()
相同,但其结果只包括替换后的内容。
preg_split()
分解一个字符串。
参考资料
最后修改: 2025年01月10日 星期五 00:50