最经典的正则表达式教程之--PHP正则表达式
- 格式:ppt
- 大小:280.00 KB
- 文档页数:57
php中正则表达式中的特殊符号字符/意义:对于字符,通常表⽰按字⾯意义,指出接着的字符为特殊字符,不作解释。
例如:/b/匹配字符'b',通过在b 前⾯加⼀个反斜杠,也就是/b/,则该字符变成特殊字符,表⽰匹配⼀个单词的分界线。
或者:对于⼏个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,⽽应该按字⾯解释。
例如:*是⼀个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。
为了匹配字⾯上的*,在a前⾯加⼀个反斜杠;例如:/a*/匹配'a*'。
字符^意义:表⽰匹配的字符必须在最前边。
例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前⾯的'A'。
字符$意义:与^类似,匹配最末的字符。
例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。
字符*意义:匹配*前⾯的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"Agoat grunted"中的任何字符。
字符+意义:匹配+号前⾯的字符1次或n次。
等价于{1,}。
例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。
字符?意义:匹配?前⾯的字符0次或1次。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
字符.意义:(⼩数点)匹配除换⾏符外的所有单个的字符。
1到99正则表达式摘要:1.正则表达式的概念与用途2.1到99的数字正则表达式3.数字范围的正则表达式写法4.应用场景及示例正文:正则表达式(Regular Expression),又称规则表达式、常规表达式,是一种用于匹配字符串模式的文本字符串。
它通过一系列特殊的字符和元字符,描述字符串中可能出现的模式,广泛应用于文本搜索与匹配、数据分析等领域。
在正则表达式中,如何表示1到99的数字范围呢?我们可以通过以下正则表达式实现:```^(?:[1-9]|[1-9][0-9])$```这个正则表达式的含义如下:- `^`:表示字符串的开始位置- `(?:...)`:表示一个非捕获组,用于匹配括号内的内容,但不捕获匹配的文本- `[1-9]`:表示匹配0到9之间的任意一个数字- `|`:表示或,用于连接两个或多个正则表达式- `[1-9][0-9]`:表示匹配10到99之间的任意一个两位数- `$`:表示字符串的结束位置这个正则表达式既可以匹配1到9的单个数字,也可以匹配10到99的两位数,范围覆盖了1到99的所有整数。
以下是一个使用Python的示例:```pythonimport retext = "123 456 789 10 20 30 40 50 60 70 80 90"pattern = pile(r"^(?:[1-9]|[1-9][0-9])$")result = pattern.findall(text)print(result) # 输出:["123", "456", "789", "10", "20", "30", "40", "50", "60", "70", "80", "90"]```在这个示例中,我们首先导入了Python的`re`模块,然后定义了一个包含1到99数字的文本。
正则表达式150种表达方式1、删除所有数字。
只要查找:\d就OK。
为了不留空行:替换处:\d2、删除所有英文字母。
只要查找:\a就OK。
为了不留空行:替换处:\d3、删除除换行符以外的所有。
只要查找:. 为了不留空行:替换处:\d4、既删除英文字母又删除数字。
只要查找:\w。
为了不留空行:替换处:\d5、删除数字加字母加等于(如:3a=或3zz=)只要查找:\d+\a+\=。
为了不留空行:替换处:\d6、删除换行。
只要查找:$。
替换处:\d(还原查找:\a+=\f。
替换:\0\n)。
如在换行后加一空格,查找:(\a)$。
替换:\0 \d。
7、删除空行只要查找:^$。
为了不留空行:替换处:\d8、删除首尾空格。
只要查找:^\s*|\s*$就OK9、删除行前数字及顿号。
只要查找:\d+、替换为空10、删除末尾标点符号。
只要查找:\P+$|\P+\s+$,“|”前面是没有空格的,“|”后面有空格,P后的加是为了……而用的。
11、删除末尾空格。
只要查找:\s+$。
替换为空。
12、删除第一个字如:“的我们”中的“的”只要查找:^\的。
13、删除第几个字。
查找:查找:^().(.+)。
替换:\1\2。
去掉前面的拼音:查找:^\a+替换为空。
第一个括号里可加“.”且可变。
14、删含的。
查:.*的.*替:\d。
的头查:.*=的.*替:\d。
的尾查:\a.*\c.*的$替:\d(留它不匹配)●删非的行查:^[^的]+$替:\d15、删除几码以上的码查:^(...)...替:\1。
删第几位码。
查:^(...).(.+)替:\1\2(变成\1,\2则其位则改成,了)首括号的.可变。
16、删除各类型的几字词,但必须是码前词后或纯词。
三字词:查找:^\~f{}\f{3}$替换:\d。
替换:\d “3”可以改。
17、删除11字词及其以上的词条查找(自定义格式):\a{}\=(\c|\P|\p){11,}。
替换:\d。
11可改。
正则表达式-语法⼤全1. 正则表达式规则1.1 普通字符字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。
表达式中的普通字符,在匹配⼀个字符串的时候,匹配与之相同的⼀个字符。
,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。
(注:下标从0开始还是从1开始,因当前编程语⾔的不同⽽可能不同),匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。
1.2 简单的转义字符⼀些不便书写的字符,采⽤在前⾯加 "/" 的⽅法。
这些字符其实我们都已经熟知了。
表达式可匹配/r, /n代表回车和换⾏符/t制表符//代表 "/" 本⾝还有其他⼀些在后边章节中有特殊⽤处的标点符号,在前⾯加 "/" 后,就代表该符号本⾝。
⽐如:^, $ 都有特殊意义,如果要想匹配字符串中 "^" 和 "$" 字符,则表达式就需要写成 "/^" 和 "/$"。
表达式可匹配/^匹配 ^ 符号本⾝/$匹配 $ 符号本⾝/.匹配⼩数点(.)本⾝这些转义字符的匹配⽅法与 "普通字符" 是类似的。
也是匹配与之相同的⼀个字符。
,匹配结果是:成功;匹配到的内容是:"$d";匹配到的位置是:开始于3,结束于5。
1.3 能够与 '多种字符' 匹配的表达式正则表达式中的⼀些表⽰⽅法,可以匹配 '多种字符' 其中的任意⼀个字符。
⽐如,表达式 "/d" 可以匹配任意⼀个数字。
虽然可以匹配其中任意字符,但是只能是⼀个,不是多个。
这就好⽐玩扑克牌时候,⼤⼩王可以代替任意⼀张牌,但是只能代替⼀张牌。
PHP常⽤正则表达式PHP代码$str = preg_replace("/(<a.*?>)(.*?)(<\/a>)/", '\1<span class="link">\2</span>\3', $str);其中⽤了三个⼦模式(每个圆括号中内容为⼀个⼦模式),第⼀个是链接开始标签,第⼆个是链接⽂本,第三个是</a>然后第⼆个参数中\1、\2、\3就表⽰这三个部分,要替换成什么样⼦还不简单?获取页⾯中的所有链接地址的PHP函数下⾯这个⽤PHP写的函数,可以获取任意的字符串$string中的所有链接地址($string可以是从⼀个HTML页⾯⽂件直接读取出来的字符串),结果保存在⼀个数组中返回.该函数⾃动把电⼦邮件地址排除在外,⽽且返回的数组中不会有重复元素.function GetAllLink($string){$string = str_replace("\r","",$string);$string = str_replace("\n","",$string);$regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)";$regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)";//去掉标签之间的⽂字$string = eregi_replace(">[^<>]+<","><", $string);//去掉JAVASCRIPT代码$string = eregi_replace("<!--.*//-->","", $string);//去掉⾮<a>的HTML标签$string = eregi_replace("<[^a][^<>]*>","", $string);//去掉EMAIL链接$string = eregi_replace("<a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string);//替换需要的⽹页链接$string = eregi_replace("<a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string);$output[0] = strtok($string, "\t");while(($temp = strtok("\t"))){if($temp && !in_array($temp, $output))$output[++$i] = $temp;}return $output;}以下是以PHP的语法所写的⽰例验证字符串是否只含数字与英⽂,字符串长度并在4~16个字符之间<?php$str = 'a1234';if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {echo "验证成功";} else {echo "验证失敗";}?>简易的台湾⾝分证字号验证<?php$str = 'a1234';if (preg_match("^(?:\d{15}|\d{18})$", $str)) {echo "验证成功";} else {echo "验证失敗";}>匹配中⽂字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中⽂还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1)匹配空⽩⾏的正则表达式:\n\s*\r评注:可以⽤来删除空⽩⾏匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />评注:⽹上流传的版本太糟糕,上⾯这个也仅仅能匹配部分,对于复杂的嵌套标记依旧⽆能为⼒匹配⾸尾空⽩字符的正则表达式:^\s*|\s*$评注:可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*评注:表单验证时很实⽤匹配⽹址URL的正则表达式:[a-zA-z]+://[^\s]*评注:⽹上流传的版本功能很有限,上⾯这个基本可以满⾜需求匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实⽤匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}评注:匹配形式如 0511-******* 或 021-********匹配腾讯QQ号:[1-9][0-9]{4,}评注:腾讯QQ号从10000开始匹配中国邮政编码:[1-9]\d{5}(?!\d)评注:中国邮政编码为6位数字匹配⾝份证:\d{15}|\d{18}评注:中国的⾝份证为15位或18位匹配ip地址:\d+\.\d+\.\d+\.\d+评注:提取ip地址时有⽤匹配特定数字:^[1-9]\d*$ //匹配正整数^-[1-9]\d*$ //匹配负整数^-?[1-9]\d*$ //匹配整数^[1-9]\d*|0$ //匹配⾮负整数(正整数 + 0)^-[1-9]\d*|0$ //匹配⾮正整数(负整数 + 0)^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配⾮负浮点数(正浮点数 + 0)^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配⾮正浮点数(负浮点数 + 0)评注:处理⼤量数据时有⽤,具体应⽤时注意修正匹配特定字符串:^[A-Za-z]+$ //匹配由26个英⽂字母组成的字符串^[A-Z]+$ //匹配由26个英⽂字母的⼤写组成的字符串^[a-z]+$ //匹配由26个英⽂字母的⼩写组成的字符串^[A-Za-z0-9]+$ //匹配由数字和26个英⽂字母组成的字符串^\w+$ //匹配由数字、26个英⽂字母或者下划线组成的字符串下⾯是⼀些特殊字符:正则表达式中的特殊字符:(学习参考书-<<精通正则表达式>>)字符意义:对于字符,通常表⽰按字⾯意义,指出接着的字符为特殊字符,不作解释。
正则表达式入门教程以下内容经正则表达式学习网授权≈正则表达式是什么?≈在使用电脑进行各种文字处理的时候,我们有时需要查找和匹配一些特殊的字符串,如邮箱地址、验证用户输入的密码是否包含了大小写字母和数字,查找HTML源文档中的所有web地址等等,这时我们就可以使用到正则表达式。
正则表达式本身是一个“字符串”,通过这个“字符串”去描述字符组成规则。
如abbb、abbbb、abbbbb这三个字符串包都是以a字母开头a后面有一个b字母,而且b字母重复了3到5次。
用正则表达式来描述就是ab{3,5},b{3,5}表示b字符重复3到5次。
如果我们想匹配ababab这样的字符串,ab重复了3次,用正则表达式表示就是(ab){3},圆括号()是正则表达式中的分组。
大家如果想亲自感受正则表达式的使用效果,可以打开正则表达式测试系统。
如以上实例所展示的,正则表达式为人们提供了一种简单易用的字符处理工具。
它在目前主流的文字处理软件中都提供了良好的支持(不仅是编程软件,还有文字处理软件Uedit32、EditPlus,网页采集软件火车头等等),它具有很强的通用性,学好它,我们可以达一变应万变的效果。
≈正则表达式详解≈像{},()这种在正则表达式中,具有特殊含义的字符称为元字符(metacharacter)。
元字符是组成正则表达式的基本元素,在正则表达式经常使用的元字符不是很多,概念容易理解。
大家只要花30来分钟学完我们的教程基本上就可以完全掌握。
为了您能更快速的掌握正则表达式,我们为您推荐一款方便的正则表达式在线测试工具“RegExr”,(RegExr由免费提供)。
保留字符匹配字符本身匹配字符数量匹配字符位置分组匹配表达式选项保留字符(返回目录)在正则表达式中,有一些字符在正则表达式中具有特殊含义被称保留字符,如*表示前一个元素可以重复零次或多次,要匹配“*”字符本身使用\*,半角句号.匹配除了换行符外的所有字符,要匹配“.”使用\.。
正则表达式整理邹义良邮箱:it9981@微博:/it266论坛:定义:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
使用原则:可以使用字符串函数完成的功能,优先选择函数,复杂的操作,才选用正则表过式。
需要和函数一起使用,才能发挥出正则表达式的作用。
(分割、匹配、查找、替换…)php中提供两套正则表达式函数库:1.POSIX扩展正则表达式函数(ereg_开头)2.Perl兼容正则表达式函数(preg_开头) 推荐学习和使用正则表达式模式如何编写语法:1.定界符号2.原子3.元字符4.模式修正符号测试代码<?php$regex='/[^0-9a-zA-Z]/';$str='1aA#';echo '表达式:<b>'.$regex.'</b> ';echo '字符串:<b>'.$str.'</b> ';if(preg_match($regex,$str)){echo '<font color="green">匹配成功</font>';}else{echo '<font color="red">匹配失败</font>';}?>定界符:起始和结束的符号。
除了字母、数字和反斜线(\)以外的任何字符,都可以为定界符。
// || {} !! ……没有特殊需要,都使用//作为定界符定界符之间,是原子、元字符,字界符外边,是模式修正符。
有的语言中,可以没有定界符原子:是正则表达式的最基本组成单位,必须至少包含一个原子。
只要在正则表达式中,可以单独使用的字符,都是原子。
正则表达式基本符号:^ 表示匹配字符串的开始位置 (例外用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)$ 表示匹配字符串的结束位置* 表示匹配零次到多次+ 表示匹配一次到多次 (至少有一次)表示匹配零次或一次. 表示匹配单个字符| 表示为或者,两项中取一项( ) 小括号表示匹配括号中全部字符[ ] 中括号表示匹配括号中一个字符范围描述如[0-9 a-z A-Z]{ } 大括号用于限定匹配次数如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符{n,m}表示至少n,最多m\ 转义字符如上基本符号匹配都需要转义字符如 \* 表示匹配*号\w 表示英文字母和数字 \W 非字母和数字\d 表示数字 \D 非数字常用的正则表达式匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?sql语句:^(select|drop|delete|create|update|insert).*$1、非负整数:^\d+$2、正整数:^[0-9]*[1-9][0-9]*$3、非正整数:^((-\d+)|(0+))$4、负整数:^-[0-9]*[1-9][0-9]*$5、整数:^-?\d+$6、非负浮点数:^\d+(\.\d+)?$7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$9、负浮点数:^(-((正浮点数正则式)))$10、英文字符串:^[A-Za-z]+$11、英文大写串:^[A-Z]+$12、英文小写串:^[a-z]+$13、英文字符数字串:^[A-Za-z0-9]+$14、英数字加下划线串:^\w+$15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$17、邮政编码:^[1-9]\d{5}$18、中文:^[\u0391-\uFFE5]+$19、电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$20、手机号码:^((\d2,3)|(\d{3}\-))?13\d{9}$21、双字节字符(包括汉字在内):^\x00-\xff22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>24、匹配空行:\n[\s| ]*\r25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *=*('|")?(\w|\\|\/|\.)+('|"| *|>)?26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)29、提取信息中的中国手机号码:(86)*0*13\d{9}30、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}31、提取信息中的中国电话号码(包括移动和固定电话):(\d3,4|\d{3,4}-|\s)?\d{7,14}32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+34、提取信息中的任意数字:(-?\d*)(\.\d+)?35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)36、电话区号:/^0\d{2,3}$/37、腾讯QQ号:^[1-9]*[1-9][0-9]*$38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$。
正则表达式详解正则表达式1.什么是正则表达式简单的说,正则表达式是一种可以用于文字模式匹配和替换的强有力的工具。
是由一系列普通字符和特殊字符组成的能明确描述文本字符串的文字匹配模式。
正则表达式并非一门专用语言,但也可以看作是一种语言,它可以让用户通过使用一系列普通字符和特殊字符构建能明确描述文本字符串的匹配模式。
除了简单描述这些模式之外,正则表达式解释引擎通常可用于遍历匹配,并使用模式作为分隔符来将字符串解析为子字符串,或以智能方式替换文本或重新设置文本格式。
正则表达式为解决与文本处理有关的许多常见任务提供了有效而简捷的方式。
正则表达式具有两种标准:·基本的正则表达式(BRE –Basic Regular Expressions)·扩展的正则表达式(ERE – Extended Regular Expressions)。
ERE包括BRE功能和另外其它的概念。
正则表达式目前有两种解释引擎:·基于字符驱动(text-directed engine)·基于正则表达式驱动(regex-directed engine)Jeffery Friedl把它们称作DFA和NFA解释引擎。
约定:为了描述起来方便,在本文中做一些约定:1.本文所举例的所有表达时都是基于NFA解释引擎的。
2.正则表达式,也就是匹配模式,会简写为Regex。
3. Regex的匹配目标,也就是目标字符串,会简写为String。
4.匹配结果用会用黄色底色标识。
5.用1\+1=2 括起来的表示这是一个regex。
6.举例会用以下格式:testThis is a test会匹配test,testcase等2.正则表达式的起源正则表达式的”祖先”可以一直上溯至对人类神经系统如何工作的早期研究。
Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
php正则:匹配(),{},[]⼩括号,⼤括号,中括号⾥⾯的内容php正则:匹配(),{},[]⼩括号,⼤括号,中括号⾥⾯的内容⽐如有⼀段字符:$s='60c8{"code":"200","message":"success","data":[{"_id":"780521","time":1476768196,"position":{"long":108.90415,"lat":35.25623},"speed":495.677952,"anum":"B6552","atype":"A321","atypename":"Airbus A321-231","angle":"198","vspeed":"-576","devic 我要匹配,{}括号⾥⾯的内容,单独拿出来。
preg_match('/(?:\{)(.*)(?:\})/i', $s, $match);var_dump($match);说明:PHP使⽤正则表达式提取字符串中尖括号<>、⼩括号()、中括号[]、⼤括号{}中的字符⽰例,需要的朋友可以参考下$str="你好<我>(爱)[北京]{天安门}";echo f1($str); //返回你好echo f2($str); //返回我echo f3($str); //返回爱echo f4($str); //返回北京echo f5($str); //返回天安门function f1($str){$result = array();preg_match_all("/^(.*)(?:<)/i",$str, $result);return $result[1][0];}function f2($str){$result = array();preg_match_all("/(?:<)(.*)(?:>)/i",$str, $result);return $result[1][0];}function f3($str){$result = array();preg_match_all("/(?:\()(.*)(?:\))/i",$str, $result);return $result[1][0];}function f4($str){$result = array();preg_match_all("/(?:\[)(.*)(?:\])/i",$str, $result);return $result[1][0];}function f5($str){$result = array();preg_match_all("/(?:\{)(.*)(?:\})/i",$str, $result);return $result[1][0];}PS: (?:字符) 表⽰不捕获这个字符。