php基础 正则表达式,php正则表达式基础入门

正则表达式,用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。

PHP中的正则函数有两套:

一套是由PCRE(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数;

一套由POSIX(Portable Operating System Interface of Unix )扩展提供的。使用以“ereg_”为前缀命名的函数;(POSIX的正则函数库,自PHP 5.3以后,就不在推荐使用,从PHP6以后,就将被移除),不在本文之列。

PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。

PCRE正则表达式函数:

preg_match()

preg_match_all()

preg_quote()

preg_split()

preg_grep()

preg_replace()

在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线"/"之间,如"/apple/"。

正则中重要的几个概念有:元字符、转义、模式单元(重复)、反义、引用和断言,这些概念都可以在文中轻松的理解和掌握。

常用的元字符(Meta-character):

元字符

'\'  :引用下一个元字符

'^:行首

'.' : 除新行(newline)外的任一字符('/s'选项将使'.'匹配新行字符)

'$' :行尾(或结尾处新行之前字符)

'|' :可选项

'('与')' :分组

'['与']' :字符类。表示一类字符集合中任意一个,方括号内可使用'-'表示范围,如[0-9]; 也可使用'^表示求补集,如[^0-9]表示除0-9外的其他字符

量词(Quantifier)

'*' : 0或任意次

'+' : 1或更多次

'?' : 0或1次

{n} : n次

{n,} : 至少n次

{n, m} : n到m次

匹配方式

贪婪(greedy)方式:在模式其余部分匹配前提下,尽可能多地匹配字符

最少匹配(minimum): 尽可能少地匹配。量词后使用'?'表示使用最少匹配方式

占有式:与贪婪方式相近,尽可能多地匹配字符,但绝不回退(backtrack,即使模式其余部分无法匹配,也不减少本部分的匹配数量)。在数量词之后使用'+'表示使用占有式匹配。

转义序列

'\t' : 制表符(HT, TAB)

'\n' : 换行(LF, NL)

'\r' : 回车(CR)

'\f' : 进纸(Form Feed, FF)

'\a' : 报警 (Alarm, BEL)

'\e' : 转义(ESC)

"\0xx" : 八进制数值对应字符,如\033表示ESC

"\xhh" : 16进制数值对应字符,如\x1B表示ESC

"\x{hhhh}" : 16进制long型数值对应字符,如\x{263a}表示unicode SMILEY

"\cK" : K可以为任意字母,表示控制字符"control-K","\cK"表示如VT

"\N{name}" : unicode命名字符

"\N{U+hhhh}" : unicode字符

'\l' : 小写下一字符

'\u' : 大写下一字符

'\L' : 小写随后字符串直至'\E'

'\U' : 大写随后字符串直至'\E'

'\E' : 结束大小写转换

'\Q' : 引用随后字符(禁止转义)直至'\E'

字符类及其他转义字符

'\A' :匹配字符串串首的原子

'\Z' : 字符串尾或尾部换行字符之前

'\z' : 字符串尾

'\b' :匹配单词的边界 /\bis/ 匹配头为is的字符串 /is\b/ 匹配尾为is的字符串 /\bis\b/ 定界

'\B' :匹配除单词边界之外的任意字符 /\Bis/ 匹配单词“This”中的“is”

'\G' : 在上一个匹配处进行匹配

'\w' : 匹任任一单词(word)字符(26个英文字母、10个数字,加下划线'_')

'\W' : 匹配任一非单词字母

'\s' : 任一空白字符(空格' ', 制表符'\t'等)

'\S' : 任一非空白字符

'\d' : 任一数字字符[0-9]

'\D' : 任一非数字字符

“\pP” : 匹配命名属性P

"\PP" : 匹配非P

'\X' : 匹配unicode扩展字符集(eXtended grapheme cluster)

'\C' : 匹配单个C字符(字节),即使工作在unicode模式下

'\n' : n为数字,后向引用指定组n

"\gn" : 后向引用指定组n

"\g{-n}" : 表示相对(当前位置之前的)第n个后用引用组n

"\g{name}" : 后向引用命名组(name)

"\k{name}" : 后向引用

'\K' : 使\K左侧部分,不引入到$&中

'\N' : 除'\n'外的任一字符

'\v' : 垂直空白符

'\V' : 非垂直空白符

'\h' : 水平空白符

'\H' : 非水平空白符

'\R' : 行分割符号

模式修正符(Pattern Modifiers):

模式修正符在忽略大小写、匹配多行中使用特别多,掌握了这一个修正符,往往能解决我们遇到的很多问题。

i    -可同时匹配大小写字母

M   -将字符串视为多行

S   -将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符

X   -模式中的空白忽略不计

U   -匹配到最近的字符串

e   -将替换的字符串作为表达使用

示例:/apple/i可匹配"apple"或"Apple"等,忽略大小写。 /i

$str = 'apple Apple';$regex = '/apple/i';if(preg_match_all($regex, $str, $arr)){var_dump($arr);

}//输出array(1) { [0]=> array(2) { [0]=> string(5) "apple" [1]=> string(5) "Apple" } }

PCRE的模式单元:

(\\1 提取第1位属性)

/^\d{2}([\W])\d{2}\\1\d{4}$/匹配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正则表达式不匹配“12/34-5678”的格式。这是因为模式“[\W]”的结果“/”已经被存储。下个位置“\1”引用时,其匹配模式也是字符“/”。

当不需要存储匹配结果时使用非存储模式单元"(?:)"

$str = '12-31-2006';$regex = '/^\d{2}([\W])\d{2}\\1\d{4}$/';if(preg_match_all($regex, $str, $arr)){var_dump($arr);

}//输出array(2) { [0]=> array(1) { [0]=> string(10) "12-31-2006" } [1]=> array(1) { [0]=> string(1) "-" } }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值