PHP编程
Completion requirements
正则表达式
语法
常见的正则表达式
| 字符 | 类型 | 解释 |
|---|---|---|
| . | 点号 | 任意字符 |
| [...] | 方括号 | 字符类:类中列举的所有字符 |
| [^...] | 方括号加脱字符 | 补充类:所有除列举字符外的字符 |
| ^ | 脱字符 | 字符串或行的开始 |
| $ | 美元符号 | 字符串或行的结束 |
| | | 管道符 | 选择 |
| (...) | 圆括号 | 捕获组:也用于限定选择的范围 |
| * | 星号 | 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()
分解一个字符串。
参考资料
Last modified: Friday, 10 January 2025, 12:50 AM