PHP正则表达式

匹配原则

正则表达式在匹配字符串时,遵循以下2个基本原则: 
1.最左原则:正则表达式总是从目标字符串的最左侧开始,依次匹配,直到匹配到符合表达式要求的部分,或直到匹配目标字符串的结束。 
2.最长原则:对于匹配到的目标字符串,正则表达式总是会匹配到符合正则表达式要求的最长的部分;即贪婪模式

分隔符

当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。

常用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)

当表达式有过多的转义字符时,建议优先使用#,如url;

$str = 'http://baidu.com';

$pattern = '/http:\/\/.*com/';//需要转义/

echo preg_match($pattern,$str,$match);



$pattern = '#http://.*com#';//不需要转义/

echo preg_match($pattern,$str,$match);

特殊字符

特别字符说明
^

1,匹配输入字符串的开始位置,如果设置模式修饰符为m,则 ^ 也匹配 ‘\n’ 或 ‘\r’之后字符。

2,在字符域[]中表示取反,如[^1-5],该字符不是1~5之间的数字

$匹配输入字符串的结尾位置。如果设置模式修饰符为m,则 $ 也匹配 ‘\n’ 或 ‘\r’之前字符。
.匹配除换行符 \n之外的任何单字符。如果设置模式修饰符为s,则匹配所有字符。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
[ ]

1,字符集合(字符域)。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

2,匹配指定范围内的任意字符。例如,[a-zA-Z0-9]。

{ }限定符表达式
\转义字符
|或选择。例如,'z|food' 能匹配 "z" 或 "food"

 

 

 

 

 

 

 

 

 

 

限定符

限定符主要是用来限定每个字符串出现的次数。

限定字符含义
零次或一次
*零次或多次
+一次或多次
{n}n次
{n,}至少n次
{n,m}n到m次

 

 

 

 

 

 

 

预定义字符集

字符含义
\d任意一个十进制数字,等价于 [0-9]。
\D任意一个非十进制数字,等价于 [^0-9]。
\s任意一个空白字符(空格、换行符、换页符、回车符、字表符)
\S任意一个非空白字符
\w任意一个单词字符,等价于[A-Za-z0-9_]。
\W任意个非单词字符,等价于 [^A-Za-z0-9_]。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\n匹配一个换行符。等价于 \x0a 和 \cJ。
\r匹配一个回车符。等价于 \x0d 和 \cM。
\f匹配一个换页符。等价于 \x0c 和 \cL。
\t匹配一个制表符。等价于 \x09 和 \cI。

 

 

 

 

 

 

 

 

 

 

 

 

模式修饰符

模式修饰符的作用是设定模式,也就是正则表达式如何解释。

修饰符说明
i忽略大小写
m多文本模式,使用^和$表示任何一行都可以以正则表达式开始或结束
s点号元字符“.”匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行
x

忽略空白字符

U取消贪婪模式

 

 

 

 

 

 

 

其它匹配语法

  • (?:pattern) 匹配结果,但不进行存储供以后使用。
  • (?=pattern) (?!pattern) 正向预查:在字符串右侧必须匹配(或不匹配)pattern。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 匹配结果是"Windows2000" 中的 "Windows" ,不包含后面的“2000”。
  •  (?<=pattern) (?<!pattern)逆向预查:在字符串左侧必须匹配(或不匹配)pattern。同上。
  • \num反向引用:就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。字符串是否有重复字符:(\w).*\1

  • ?惰性匹配:默认为贪婪匹配,也就是就是匹配尽可能多的字符。惰性匹配只需要在其后面添加一个”?”即可。如字符串“manmant”,m.*n匹配到的字符串是“manman”,而m.*?n匹配到是“man”。

PHP正则函数

preg_match($pattern,$subject,[array &$matches])

preg_match_all($pattern,$subject,array &$matches)

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

preg_split ( string pattern,stringsubject [, int limit=−1[,intflags = 0 ]] )

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值