php---看我如何匹配数据(正则牛pi!)

正则表达式

1.初始正则

1.1正则表达式
正则表达式作为一个匹配的模版,是由原子(普通字符,例如字符a到z)、特殊字符(元字符,例如*+和?等)、以及模式修正符三部分组成的文字模式

在php中有两套正则表达式,一套叫PCRE—(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数;

PCRE的来源与perl语言,这是对字符串处理比较强大的语言,起初php就是由perl开发的产品。

另外一套叫PCIX (Portable Operating System Interface of Unix )扩展提供的。使用以“ereg_”为前缀命名的函数;

1.2几个fp
  • 若干个正则匹配的函数: preg_match()
  • 进行正则表达式匹配 preg_match_all
  • 进行全局正则表达式匹配 preg_replace
  • 执行正则表达式的匹配和替换
  • preg_split() 正则分割字符串
  • preg_grep 返回与模式匹配的数组单元
  • preg_replace_callback 用回调函数执行正则表达式的搜索和替换

2正则的语法

2.1定界符
在程序语言中都使用与perl兼容的正则表达式,通常需要将模式表达式放在定界符之间,如:"/"
作为定界符经常使用斜线/,如“/apple/”。用户只要把需要匹配的模式内容定界符中即可,当然作为字符的定界符也不局限于	“/”。除了字母,数字和斜线‘/’以外的任何字符都可以作为定界符像"# ! | "

fp:

/</\w+> —使用反斜线作为定界符合法
|(\d{3})-\d+|S ----使用竖线作为定界符合法
!^(?i)php[34]! --使用竖线”!”作为定界符合法
{^\s+(\s+)?$} --使用竖线”}”作为定界符合法
/href=‘(.*)’ --非法定界符,缺少结束定界符
1-\d3-\d3-\d4| --非法定界符,缺少其实定界符

2.2原子

原子是正则表达式的最基本的组成单元,而且在每个模式中最少要少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。

  1. 普通字符作为原子: 如 az、AZ、0~9 等
  2. 一些特殊字符和转义后元字符作为原子:所有标点符号,但语句特殊意义的符号需要转义后才可作为原子,如:\” \’ * + ? . 等
  3. 一些非打印字符作为原子: 如:\f \n \r \t \v \cx4. 使用“通用字符类型”作为原子:如:\d \D \w \W \s \S。
  4. 自定义原子表([])作为原子:如:’/[apj]sp/’ ’/[^apj]sp/’

fp:
\cx
匹配由于x指明的控制字符。如\cx 匹配一个control-m或者回车符号。x的值必须是A-Z 或者 a-z之间。
\f
匹配一个换页符。等价于\x0c或者\cL
\n
匹配一个换行符等价于\x0a 或者\cJ
\r
匹配一个回车符,等价于\x0d或者\cM
\t
匹配一个制表符等价于\x09或者\cl
\v
匹配一个垂直制表符等价于\0xb或者\xK
\d
表示匹配一个任意的十进制数字{0-9}
\D
匹配一个非十进制数字{^0-9
\s
匹配一个任意的空白符,等价于{\f\n\r\t\v}
\S
匹配匹配除空白字符以外的字符{^\f\n\r\t\v}
\w
匹配一个任意数字,字母或者下划线{0-9a-zA-Z}
\W
匹配一个除数字字母下划线的任意字符,等价于{^0-9a-zA- Z}

2.3原字符
*
匹配0,1次多次前面的原子
+
匹配1次或多次其前面的原子
?
匹配0次或多次其前面的原子
.
匹配除换行以外任意一个字符
|
匹配两个或多个分支选择
{n}
表示前面的原子出现n次
{n,}
表示其前面的原子不小于n次
{n,m}
表示前面的原子至少出现n次最多出现m次
^或者\A
匹配字符串开始的位置,或者多行模式下,行的开头。
$或者\Z
匹配输入字符串的结束位置,或者多行模式下,行的结尾.
\b
匹配单词的边界
\B
匹配单词边界以外的部分
[]
匹配括号中任意一个原子
[^]
匹配除方括号中的原子以外任意一个字符
()
匹配其整体为一个原子,即模式单元。可以理解为由多个单个原子组成的大原子
2.4需要注意的几点

字符串边界限制

在某些情况下,需要对匹配范围进行限定,以获得更准确的匹配结果。“^”和“KaTeX parse error: Undefined control sequence: \A at position 104: …me in”中元字符“^”或“\̲A̲” 置于字符串的开始确保模式匹…”或“\Z” 置于字符串的结束,确保模式匹配出现字符串尾端。/in / 如 果 不 加 边 界 限 制 元 字 符 , 将 获 得 更 多 的 匹 配 结 果 。 / T o m /如果不加边界限制元字符,将获得更多的匹配结果。/^Tom //Tom/精确匹配 /Tom/模糊匹配

单词边界限制

在使用各种编辑软件的查找功能时,可以通过选择“按单词查找”获得更准确的结果。正则表达式中也提供类似的功能。例如:在字符串“This island is a beautiful land”中元字符“\b”对单词的边界进行匹配;/\bis\b/ 匹配单词“is”,不匹配“This”和“island”。/\bis 匹配单词“is”和“island”中的“is”,不匹配“This”元字符“\B”对除单词边界以外的部分进行匹配。/\Bis\B/ 将明确的指示不与单词的左、右边界匹配,只匹配单词的内部。所以在这个例子中没有结果。/\Bis 匹配单词“This”中的“is”

重复匹配

正则表达式中有一些用于重复匹配某些原子的元字符:“?”、“”、“+”。他们主要的区别是重复匹配的次数不同。元字符“?”:表示0次或1次匹配紧接在其前的原子。例如:/colou?r/匹配“colour”或“color”。元字符“”:表示0次、1次或多次匹配紧接在其前的原子。例如:/zo*/可以匹配z、zoo元字符“+”:表示1次或多次匹配紧接在其前的原子。例如:/go+gle/匹配“gogle”、“google”或“gooogle”等中间含有多个o的字符串。

fp:

元字符“{
    }”准确地指定原子重复的次数,
指定所匹配的原子出现的次数。“{
   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。

任何一个字符

元字符“.”匹配除换行符外任何一个字符。相当于:^\n^\r\n。例如:/pr.y/可以匹配的字符串“prey”、“pray”或“pr%y”等。通常可以使用“.*”组合来匹配除换行符外的任何字符。在一些书籍中也称其为“全匹配符” 或 “单含匹配符”。例如:/^a.*z / 表 示

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值