【WEB安全】 PHP基础文件知识完整教学中(超详细)

文章目录​​​​​​​

[1.PHP 文件处理](#1.PHP 文件处理)

[PHP 操作文件](#PHP 操作文件)

[PHP 文件打开/读取/关闭](#PHP 文件打开/读取/关闭)

[​​​​​​​文件的 复制 删除 重名](#文件的 复制 删除 重名)

​​​​​​​文件的判断

2.PHP获取文件属性

3.PHP目录操作

4.命名空间

[PHP 命名空间可以解决以下两类问题:](#PHP 命名空间可以解决以下两类问题:)

5.正则表达式

正则表达式简介

正则表达式的基本语法

特殊字符

元字符表


1.PHP 文件处理

PHP 操作文件

PHP 拥有的多种函数可供创建、读取、上传以及编辑文件。

注意:请谨慎操作文件!

当您操作文件时必须非常小心。如果您操作失误,可能会造成非常严重的破坏。常见的错误是:

编辑错误的文件

被垃圾数据填满硬盘

意外删除文件内容

PHP readfile() 函数

readfile() 函数读取文件,并把它写入输出缓冲。

假设我们有一个名为 "webdictionary.txt" 的文本文件,存放在服务器上,就像这样:

AJAX = Asynchronous JavaScript and XML

CSS = Cascading Style Sheets

HTML = Hyper Text Markup Language

PHP = PHP Hypertext Preprocessor

SQL = Structured Query Language

SVG = Scalable Vector Graphics

XML = EXtensible Markup Language

读取此文件并写到输出流的 PHP 代码如下(如读取成功则 readfile() 函数返回字节数):

实例

<?php

echo readfile("webdictionary.txt");

?>

PHP 文件打开/读取/关闭

在本节中,我们向您讲解如何在服务器上打开、读取以及关闭文件。

PHP Open File - fopen()

打开文件的更好的方法是通过 fopen() 函数。此函数为您提供比 readfile() 函数更多的选项。

在课程中,我们将使用文本文件 "webdictionary.txt":

AJAX = Asynchronous JavaScript and XML

CSS = Cascading Style Sheets

HTML = Hyper Text Markup Language

PHP = PHP Hypertext Preprocessor

SQL = Structured Query Language

SVG = Scalable Vector Graphics

XML = EXtensible Markup Language

fopen() 的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式。如果 fopen() 函数未能打开指定的文件,下面的例子会生成一段消息:

实例

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");

echo fread($myfile,filesize("webdictionary.txt"));

fclose($myfile);

?>

提示:我们接下来将学习 fread() 以及 fclose() 函数。

文件会以如下模式之一打开:

PHP 读取文件 - fread()

fread() 函数读取打开的文件。

fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

如下 PHP 代码把 "webdictionary.txt" 文件读至结尾:

fread($myfile,filesize("webdictionary.txt"));

PHP 关闭文件 - fclose()

fclose() 函数用于关闭打开的文件。

注释:用完文件后把它们全部关闭是一个良好的编程习惯。您并不想打开的文件占用您的服务器资源。

fclose() 需要待关闭文件的名称(或者存有文件名的变量):

<?php

$myfile = fopen("webdictionary.txt", "r");

// some code to be executed....

fclose($myfile);

?>

PHP 读取单行文件 - fgets()

fgets() 函数用于从文件读取单行。

下例输出 "webdictionary.txt" 文件的首行:

实例

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");

echo fgets($myfile);

fclose($myfile);

?>

运行实例

注释:调用 fgets() 函数之后,文件指针会移动到下一行。

PHP 检查 End-Of-File - feof()

feof() 函数检查是否已到达 "end-of-file" (EOF)。

feof() 对于遍历未知长度的数据很有用。

feof() 函数检查是否已到达文件末尾(EOF)

下例逐行读取 "webdictionary.txt" 文件,直到 end-of-file:

实例

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");

// 输出单行直到 end-of-file

while(!feof($myfile)) {

echo fgets($myfile) . "<br>";

}

fclose($myfile);

?>

运行实例

PHP 读取单字符 - fgetc()

fgetc() 函数用于从文件中读取单个字符。

下例逐字符读取 "webdictionary.txt" 文件,直到 end-of-file:

实例

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");

// 输出单字符直到 end-of-file

while(!feof($myfile)) {

echo fgetc($myfile);

}

fclose($myfile);

?>

运行实例

注释:在调用 fgetc() 函数之后,文件指针会移动到下一个字符。

在本节中,我们将为您讲解如何在服务器上创建并写入文件。

PHP 创建文件 - fopen()

fopen() 函数也用于创建文件。也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。

如果您用 fopen() 打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)。

下面的例子创建名为 "testfile.txt" 的新文件。此文件将被创建于 PHP 代码所在的相同目录中:

实例

$myfile = fopen("testfile.txt", "w")

PHP 文件权限

如果您试图运行这段代码时发生错误,请检查您是否有向硬盘写入信息的 PHP 文件访问权限。

PHP 写入文件 - fwrite()

fwrite() 函数用于写入文件。

fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串。

下面的例子把姓名写入名为 "newfile.txt" 的新文件中:

实例

<?php

$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");

$txt = "Bill Gates\n";

fwrite(myfile, txt);

$txt = "Steve Jobs\n";

fwrite(myfile, txt);

fclose($myfile);

?>

请注意,我们向文件 "newfile.txt" 写了两次。在每次我们向文件写入时,在我们发送的字符串 $txt 中,第一次包含 "Bill Gates",第二次包含 "Steve Jobs"。在写入完成后,我们使用 fclose() 函数来关闭文件。

如果我们打开 "newfile.txt" 文件,它应该是这样的:

Bill Gates

Steve Jobs

PHP 覆盖(Overwriting)

如果现在 "newfile.txt" 包含了一些数据,我们可以展示在写入已有文件时发生的的事情。所有已存在的数据会被擦除并以一个新文件开始。

在下面的例子中,我们打开一个已存在的文件 "newfile.txt",并向其中写入了一些新数据:

实例

<?php

$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");

$txt = "Mickey Mouse\n";

fwrite(myfile, txt);

$txt = "Minnie Mouse\n";

fwrite(myfile, txt);

fclose($myfile);

?>

如果现在我们打开这个 "newfile.txt" 文件,Bill 和 Steve 都已消失,只剩下我们刚写入的数据:

Mickey Mouse

Minnie Mouse

​​​​​​​文件的 复制 删除 重名

php文件重命名:函数rename()。

php文件复制:函数copy();

php文件删除:函数unlink();

​​​​​​​文件的判断

file_exists() 判断文件是否存在

is_file() 是否为文件。

2.PHP获取文件属性

当我们在程序中操作文件时,可能会使用到文件的一些常见属性,比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数,如下表所示。

<?php

$file = 'test.txt';

file_exists($file) or die('文件不存在,程序退出!');

echo file.' 文件大小是:'.filesize(file).' 个字节<br>';

if(is_readable($file)){

echo $file.' 文件是可读的。<br>';

}else{

echo $file.' 文件是不可读的。<br>';

}

if(is_writable($file)){

echo $file.' 文件是可写的。<br>';

}else{

echo $file.' 文件是不可写的。<br>';

}

if(is_executable($file)){

echo $file.' 文件是可执行的。<br>';

}else{

echo $file.' 文件是不可执行的。<br>';

}

echo '文件的创建时间是:'.date('Y-m-d H:i:s',filectime($file)).'。<br>';

echo '文件的修改时间是:'.date('Y-m-d H:i:s',filemtime($file)).'。<br>';

echo '文件上次的访问时间是:'.date('Y-m-d H:i:s',fileatime($file)).'。<br>';

?>

3.PHP目录操作

目录操作

新建目录:mkdir(路径,权限,递归创建)

删除目录:rmdir()

移动(改名):rename()

获取目录内容:

//打开目录

目录句柄 = opendir()

//读取目录

文件名 = readdir(目录句柄)

依次读取文件名,同时向下移动文件句柄指针,读取不到则返回false

//关闭目录

closedir()

当前目录. 上级目录用..

递归读取目录内容:

<?php

//递归遍历目录

$dirfile="c:/";

function tree($dirfile){

dir = opendir(dirfile);

while ((file = readdir(dir)) !== false)

{

if(is_dir("dirfile{file}") && (file !=".") \&\& (file !="..")){

if(is_readable("dirfile{file}")){

echo "目录 dirfile{file} </br>";

tree("dirfile{file}");

}else{

echo "目录 dirfile{file} 不可访问</br>";

}

}

else{

if( (file !=".") \&\& (file !="..")){

echo "文件 dirfile/{file} </br>";

}

}

}

closedir($dir);

}

tree($dirfile);

?>

4.命名空间

PHP 命名空间可以解决以下两类问题:

1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读性。

命名空间(可以理解为创建文件夹)

定义:命名空间namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目中可能出现的重名结构的问题

语法:namespace 空间名

作用:不同的空间可以有同名的结构,如:类

空间元素:函数,常量,类,不包括变量!!

子空间(子文件夹)

定义:命名空间内部再划分一个命名空间,让每个小空间独立起来

语法:

namespace 空间名

namespace 空间名\子空间

命名空间访问 (url)

非限定名称访问:直接访问空间元素的名字(只访问自己命名空间的元素)

限定名称访问:使用自己当前的子空间名字+ \ + 元素名字

完全限定名称访问:\ + 全局空间 + \ + 元素名字

注:任何空间元素访问,只针对函数,类,常量

全局空间(C盘)

如果定义了命名空间,非限定名称的寻找系统常量的方式:

首先:在自己的空间内找

然后:如果找不到元素

系统常量-->进入全局空间寻找

系统类 --> 不会自动进入全局空间寻找,而是会报错

命名空间的引入

1.空间引入方式:use关键字

  1. 引入类:use 空间名\类名

  2. 引入函数:use function 空间名\函数名

  3. 引入常量:use const 空间名\常量名

2.当引入元素时重名,通过 as 来起别名

use 空间名\类名 as 别名

3.引入多个元素

use 空间名\{

类名,

function 函数名,

const 常量

}

4. 引入空间

use 空间名

5.正则表达式

正则表达式简介

正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。

在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。

正则表达式较重要和较有用的角色是验证用户数据的有效性检查。PHP中,正则表达式有三个作用:

匹配,也常常用于从字符串中析取信息。

用新文本代替匹配文本。

将一个字符串拆分为一组更小的信息块。

正则表达式的基本语法

PCRE库函数中,正则匹配模式使用分隔符与元字符组成,分隔符可以是非数字、非反斜线、非空格的任意字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)

元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上"\"进行转义

元字符 说明

* 0次、1次或多次匹配其前的原子

  • 1次或多次匹配其前的原子

? 0次或1次匹配其前的原子

| 匹配两个或多个选择

^ 匹配字符串串首的原子

$ 匹配字符串串尾的原子

\] 匹配方括号中的任一原子 \[\^\] 匹配除方括号中的原子外的任何字符 {m} 表示其前原子恰好出现m次 {m,n} 表示其前原子至少出现m次,至少出现n次(n\>m) {m,} 表示其前原子出现不少于m次 () 整体表示一个原子 . 匹配除换行之外的任何一个字符 边界限制 在某些情况下,需要对匹配范围进行限定,以获得更准确的匹配结果。"\^"和"$"分别指定字符串的开始和结束。 例如,在字符串"Tom and Jerry chased each other in the house until tom's uncel come in"中 元字符"\^" 置于字符串的开始确保模式匹配出现在字符串首端; \^Tom 元字符"$" 置于字符串的结束,确保模式匹配出现字符串尾端。 in$ 如果不加边界限制元字符,将获得更多的匹配结果。 \^Tom$精确匹配 Tom模糊匹配 **重复匹配** 正则表达式中有一些用于重复匹配某些原子的元字符:"?"、"\*"、"+"。他们主要的不同是重复匹配的次数不同。 元字符"?":表示0次或1次匹配紧接在其前的原子。 例如:colou?r匹配"colour"或"color"。 元字符"\*":表示0次、1次或多次匹配紧接在其前的原子。 例如:zo\*可以匹配z、zoo \<\[A-Za-z\]\[A-Za-z0-9\]\*\>可以匹配"\"、"\"或"\"等HTML标签,并且不严格的控制大小写。 元字符"+":表示1次或多次匹配紧接在其前的原子。 例如:go+gle匹配"gogle"、"google"或"gooogle"等中间含有多个o的字符串。 例子十六进制数字,匹配表达式是0?\[ xX\]\[0-9a-fA-F\]+,可以匹配"0x9B3C"或者"X800"等。 元字符 "." 元字符"."匹配除换行符外任何一个字符,相当于\[\^\\n\](Unix系统)或\[\^\\r\\n\](windows系统)。 例如:pr.y可以匹配的字符串"prey"、"pray"或"pr%y"等。 通常可以使用".\*"组合来匹配除换行符外的任何字符。在一些书籍中也称其为"全匹配符" 或 "单含匹配符"。 **例如:** \^a.\*z$表示可以匹配字母"a"开头,字母"z"结束的任意不包括换行符的字符串。 .+也可以完成类似的匹配功能所不同的是其至少匹配一个字符。 \^a.+z$将不匹配字符串"az"。 **重复匹配** 元字符"{}"准确地指定原子重复的次数,指定所匹配的原子出现的次数。 "{m}"表示其前原子恰好出现m次; "{m,n}"表示其前原子至少出现m次,至多出现n次; "{m,}"表示其前原子出现不少于m次。 **例如:** zo{1,3}m只能匹配字符串"zom"、"zoom"、或"zooom"。 zo{3}m只能匹配字符串"zooom" zo{3,}m可以匹配以 "z" 开头,"m"结束,中间至少为3个"o"的字符串。 bo{0,1}u可以匹配字符串"bought a butter" 中的"bou"和"bu",等价于bo?u。 原子表 -方括号表达式 原子表"\[\]"中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。如果想匹配一个 "a" 或 "e" 使用 \[ae\]。 例如: Pr\[ae\]y 匹配 "Pray" 或者 "Prey "。 原子表 "\[\^\]" 或者称为排除原子表,匹配除表内原子外的任意一个字符。 例如:p\[\^u\]匹配"part"中的"pa",但无法匹配"computer"中的"pu"因为"u"在匹配中被排除。 原子表"\[-\]"用于连接一组按ASCII码顺序排列的原子,简化书写。 例如:x\[0123456789\]可以写成x\[0-9\],用来匹配一个由 "x" 字母与一个数字组成的字符串。 例如: \[a-zA-Z\]匹配所有大小写字母 \^\[a-z\]\[0-9\]$匹配比如"z2"、 "t6" 、"g7" 0\[xX\]\[0-9a-fA-F\]匹配一个简单的十六进制数字,如"0x9"。 \[\^0-9a-zA-Z_\]匹配除英文字母、数字和下划线以外任何一个字符,其等价于\\W。 模式选择符 **元字符"\|"又称模式选择符。在正则表达式中匹配两个或更多的选择之一。** 例如:在字符串"There are many apples and pears."中,apple\|pear在第一次运行时匹配"apple";再次运行时匹配" pear"。也可以继续增加选项,如: apple\|pear\|banana\|lemon POSIX风格预定义的正则表达式的字符类: \[\[:alnum:\]\] 字母和数字字符 \[\[:alpha:\]\] 大小写字母 \[\[:lower:\]\] 小写字母 \[\[:upper:\]\] 大写字母 \[\[:digit:\]\] 数字0-9 \[\[:xdigit:\]\] 十六进制数字 \[\[:punct:\]\] 标点符号,包括上档键!@ \[\[:blank:\]\] TAB制表符和空格 \[\[:space:\]\] 任何空白字符,换行,回车符 \[\[:cntrl:\]\] 控制字符(TAB,退格) **模式单元** 元字符"()"将其中的正则表达式变为原子(或称模式单元)使用。与数学表达式中的括号类似,"()"可以做一个单元被单独使用。 例如: (Dog)+匹配的"Dog"、"DogDog"、"DogDogDog"........,因为紧接着"+"前的原子是元字符"()"括起来的字符串"Dog"。 You (very)+ old匹配"You very old"、 "You very very old" Hello (world\|earth)匹配"Hello world"、"Hello earth" 一个模式单元中的表达式将被优先匹配或运算 ### ****特殊字符**** 所谓特殊字符,就是一些有特殊含义的字符,如上面说的"\*.txt"中的\*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\\。ls \\\*.txt。正则表达式有以下特殊字符。 ![](https://i-blog.csdnimg.cn/direct/dd15b7f0cb2d446e9b660de5f8e1b258.png) 模式匹配的顺序 在使用正则表达式时,需要注意匹配的顺序。通常,正则表达式按照由左至右的顺序依次匹配。 模式匹配的顺序(从高到低) 顺序 元字符 说明 1 () 模式单元 2 ?\* +{} 重复匹配 3 \^$ 边界限制 4 \| 模式选择 ### **元字符表** 字符 描述 \\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\\n' 匹配一个换行符。序列 '\\\\' 匹配 "\\" 而 "\\(" 则匹配 "("。 \^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,\^ 也匹配 '\\n' 或 '\\r' 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\\n' 或 '\\r' 之前的位置。 \* 匹配前面的子表达式零次或多次。例如,zo\* 能匹配 "z" 以及 "zoo"。\* 等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o\*'。 {n,m} m 和 n 均为非负整数,其中n \<= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 ? 当 该字符紧跟在任何一个其他限制符 (\*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。 . 匹配除 "\\n" 之外的任何单个字符。要匹配包括 '\\n' 在内的任何字符,请使用象 '\[.\\n\]' 的模式。 (pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0...$9 属性。要匹配圆括号字符,请使用 '′或''。 (?:pattern) 匹 配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (\|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y\|ies) 就是一个比 'industry\|industries' 更简略的表达式。 (?=pattern) 正 向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95\|98\|NT\|2000)' 能匹配 "Windows 2000″ 中的 "Windows" ,但不能匹配 "Windows 3.1″ 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 (?!pattern) 负 向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95\|98\|NT\|2000)' 能匹配 "Windows 3.1″ 中的 "Windows",但不能匹配 "Windows 2000″ 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 x\|y 匹配 x 或 y。例如,'z\|food' 能匹配 "z" 或 "food"。'(z\|f)ood' 则匹配 "zood" 或 "food"。 \[xyz\] 字符集合。匹配所包含的任意一个字符。例如, '\[abc\]' 可以匹配 "plain" 中的 'a'。 \[\^xyz\] 负值字符集合。匹配未包含的任意字符。例如, '\[\^abc\]' 可以匹配 "plain" 中的'p'。 \[a-z\] 字符范围。匹配指定范围内的任意字符。例如,'\[a-z\]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 \[\^a-z\] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'\[\^a-z\]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 \\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 \\B 匹配非单词边界。'er\\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 \\cx 匹配由 x 指明的控制字符。例如, \\cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \\d 匹配一个数字字符。等价于 \[0-9\]。 \\D 匹配一个非数字字符。等价于 \[\^0-9\]。 \\f 匹配一个换页符。等价于 \\x0c 和 \\cL。 \\n 匹配一个换行符。等价于 \\x0a 和 \\cJ。 \\r 匹配一个回车符。等价于 \\x0d 和 \\cM。 \\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 \[ \\f\\n\\r\\t\\v\]。 \\S 匹配任何非空白字符。等价于 \[\^ \\f\\n\\r\\t\\v\]。 \\t 匹配一个制表符。等价于 \\x09 和 \\cI。 \\v 匹配一个垂直制表符。等价于 \\x0b 和 \\cK。 \\w 匹配包括下划线的任何单词字符。等价于'\[A-Za-z0-9_\]'。 \\W 匹配任何非单词字符包括下划线。等价于 '\[\^A-Za-z0-9_\]'。 \\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\\x41′ 匹配 "A"。'\\x041′ 则等价于 '\\x04′ \& "1″。正则表达式中可以使用 ASCII 编码。. \\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\\1′ 匹配两个连续的相同字符。 \\n 标识一个八进制转义值或一个向后引用。如果 \\n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 \\nm 标 识一个八进制转义值或一个向后引用。如果 \\nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \\nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \\nm 将匹配八进制转义值 nm。 \\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 \\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \\u00A9 匹配版权符号 (?)。 例子 匹配32位md5 /\^\[a-z0-9\]{32}$/

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行5 天前
网络安全总结
安全·web安全
feifeigo1235 天前
matlab画图工具
开发语言·matlab