1.正则表达
正则表达式:是一些用来匹配和处理文本的字符串。正则表达式是文本处理方面功能比较强大的工具之一。
2. 匹配单个字符
2.1匹配单个字符
.字符可以匹配任何一个单个字符。.可以匹配单个字符、字母、数字、或者.本身。
2.2匹配特殊字符
.有特殊含义,若是匹配.,需要在.的前面加上\(反斜杠)字符进行转义:\.。\(反斜杠)是一个元字符,用来对字符转义,在正则中,有特殊含义的字符总是以\字符开头。
3.匹配一组字符
3.1匹配多个字符的某一个
[],不匹配任何字符,只负责定义一个字符集合。
[0-9]:表示0-9的任意一个数字;同理,A-Z;a-z;A-F,
-连字符是一个特殊的元字符,作为元字符,它只能用到[]之间。在字符集合以外的地方,-只是普通的字符。-不需要被转义。
3.2取非字符
取非字符,表示除了字符集合里的字符,其他字符都可以被匹配。
[^0-9],匹配的是任何不是数字的字符。
4.使用元字符
4.1对特殊的字符进行转义
元字符是一些在正则表达式里有着特殊含义的字符。匹配这些字符,需要转义;如上面所说. ;\.匹配.;
[]也是元字符,\[匹配[;\也是元字符;匹配\需要用\\。
4.2匹配空白字符
\f:换页符
\n:换行符
\r:回车符
\t:制表符(Tab键)
4.3匹配特定的字符类别
\d:任何一个数字字符(等价于[0-9]).
\D:任何一个非数字字符(等价于[^0-9]).
\w:任何一个字母数字字符(字母数字下划线;等价于[a-zA-Z0-9_]).
\W: 任何一个非字母数字字符或下划线(等价于[^a-zA-Z0-9_]).
\s:任何一个空白字符(等价于[\f\n\r\t\v])
\S:任何一个非空白字符(等价于[^\f\n\r\t\v])
5.重复匹配
5.1有多少个匹配
+匹配一个或多个字符;至少一个a+:表示一个或多个连续出现的a;
[0-9]+:表示匹配一个或多个连续的数字;[0-9+]:表示匹配0-9或者+字符。
+是一个元字符,匹配+需要使用\+;但[0-9+]与[0-9\+]匹配含义相同。在字符集合中,一般元字符被解释成普通字符,不需要转义,但转义也没有坏处。
*匹配零个或多个字符。*是元字符,用其本身需要转义。
?只能匹配一个字符的零次或者一次出现;最多不超过一次。?是元字符,用其本身需要转义。
5.2匹配的重复次数
{n},表示前一个字符或者字符集合必须在文本中连续出现n次才算一个匹配。
{2,4};匹配区间;表示最少重复2次;最多重复4次。{3,},表示最少重复3次。
{}是元字符;匹配其本身时,最好转义。
5.3防止过度匹配
*和+都是贪婪型元字符。eg:
living in <B>ASD<\B> ANDF EFSFHI <B>HI<\B>.
正则表达式:<[Bb]>.*</[Bb]>
匹配结果:living in <B>ASD<\B>ANDF EFSF HI <B>HI<\B>.
为了尽少的匹配;可以使用元字符的懒惰型:
*=> *? ;+ => +? ; {n,} => {n,}?
刚才的例子,使用懒惰型版本:正则表达式为:<[Bb]>.*?</[Bb]>
匹配结果为:living in <B>ASD<\B>ANDF EFSF HI <B>HI<\B>.
6.位置匹配
位置匹配用来解决在什么地方进行字符串匹配的操作的问题。
6.1单词边界
\b用来匹配一个单词的开始或者结尾。Eg:
The cat scattered his food all over the room .
正则:\bcat\b
结果为:The catscattered his food all over the room .
scattered中的cat不会匹配。
特别注意的是,若是想匹配一个完整的单词,就必须在匹配的文本的前后都加上\b限定符。
\B匹配不是单词边界的连字符。
6.2字符串边界
^定义字符串开头;$定义字符串结尾。
6.3分行模式匹配
?m记号表示分行匹配,分行匹配将使得正则表达式引擎把换行分隔符当做一个字符串分隔符来对待。
在使用时,?m必须出现在整个模式的最前面。
Eg:正则表达式:
(?m)^\s//.*$,将每行注释都匹配出来了。
//begin
$cardno =decrypt_cardno($sqlrow['F_bank_card_num']);
//INIT
$trans_info =get_trans_info($sqlrow['F_trans_id']);
$sp_id = '';
//$sp_type_id = 0;
7.使用子表达式
子表达式,是一个更大表达式的一部分。引出子表达式的目的是为了把那些子表达式当做一个独立的元素使用。子表达式必须用() 括起来。
(和)是元字符,需要匹配其本身,需要用它的转义序列:\(和\)。
Eg:Ip地址的匹配:(\d{1,3}\.){3}\d{1,3}
|是正则表达式中的或操作运算符。19|20;匹配19或者20。
8.回溯引用,前后一致匹配
回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。回溯引用可以用来解决匹配HTML标题的问题,可以使<H1>xxxx</H1>前后匹配。
Eg:
正则表达式:<[hH]([1-6])>.*?</[Hh]\1>(*?,懒匹配;\1等于前面括号中出现的数字)。
匹配结果:
<h1>This is a heading</h1>
<h2>This is a heading</h3>
<h3>This is a heading</h3>
8.1大小写转换
\E:结束\L或\U转换
\i:把下一个字符转成小写
\L:把\L到\E之间的字符全部转换成小写。
\u:把下一个字符转成大写
\U:把\L到\E之间的字符全部转换成大写。
9前后查找
9.1向前查找
一个前向查找模式是一个以?=开头的子表达式(用()包含的),需要匹配的文本跟在=的后面。
文本:
正则表达式: .+(?=:)
结果:
用?=表示只要找到:就可以了,不需要把:包含在匹配的结果里。
9.2后向查找
?<=表示后向查找,用法同?=;它必须要跟在一个子表达式里,而且后跟要匹配的文本。
Eg;(?<=\$)[0-9.]+ :匹配$后面的数字或.;其中不包括$。
9.3对前后查找取非
(?=) 正前向查找
(?!) 负前向查找 :将向前查找不与给定模式匹配的文本。
(?<=) 正后向查找
(?<!) 负后向查找 :将后向查找不与给定模式相匹配的文本。
Eg:
I paid $30 for 100 apple,50 oranges,and 60pears.I save $5 on this order.
正则表达式 (?<=\$)\d+
匹配结果:I paid $30for 100 apple,and 60 pears.I save $5 on this order.
正则表达式:\b(?<!\$)\d+\b
匹配结果为:I paid $30 for 100apple,50oranges,and60pears.I save $5 on this order.
原文链接:https://www.f2er.com/regex/359386.html