PHP正则表达式的几则使用技…
来源:互联网 发布:淘宝网健身衣 编辑:程序博客网 时间:2024/06/11 14:26
PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑。
我的PHP正则入门,是起源于网上的一篇文章,这篇文章由浅入深的阐述了PHP正则表达式使用的方法,我觉得是一个很好的入门材料,不过学成还是要靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇文章有四五遍,对于其中一些比较困难的知识点,甚至要用很久才能消化,但是只要能见坚持着看完,你会发现自己对于正则的运用能力就会显著提高。
PHP正则表达式的定义:
用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
PHP中的正则函数:
PHP中有两套正则函数,两者功能差不多,分别为:
一套是由PCRE(Perl Compatible RegularExpression)库提供的。使用“preg_”为前缀命名的函数;
一套由POSIX(Portable Operating System Interface of Unix)扩展提供的。使用以“ereg_”为前缀命名的函数;(POSIX的正则函数库,自PHP5.3以后,就不在推荐使用,从PHP6以后,就将被移除)
由于POSIX正则即将推出历史舞台,并且PCRE和perl的形式差不多,更利于我们在perl和php之间切换,所以这里重点介绍PCRE正则的使用。
PCRE正则表达式
PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。
在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。
正则中重要的几个概念有:元字符、转义、模式单元(重复)、反义、引用和断言,这些概念都可以在文章[1]中轻松的理解和掌握。
常用的元字符(Meta-character):
元字符
A
Z
b
B
d
D
w
W
s
S
f
匹配一个换行符;等价于 x0a 或 cJ
匹配一个回车符等价于x0d 或 cM
t
v
oNN
xNN
cC
模式修正符(Pattern Modifiers):
模式修正符在忽略大小写、匹配多行中使用特别多,掌握了这一个修正符,往往能解决我们遇到的很多问题。
i
M
S
X
U
e
格式:/apple/i匹配“apple”或“Apple”等,忽略大小写。
PCRE的模式单元:
//1 提取第一位的属性
/^d{2} ([W])d{2}\1d{4}$匹配“12-31-2006”、“09/27/1996”、“86 014321”等字符串。但上述正则表达式不匹配“12/34-5678”的格式。这是因为模式“[W]”的结果“/”已经被存储。下个位置“1”引用时,其匹配模式也是字符“/”。
当不需要存储匹配结果时使用非存储模式单元“(?:)”
例如/(?:a|b|c)(D|E|F)\1g/将匹配“aEEg”。在一些正则表达式中,使用非存储模式单元是必要的。否则,需要改变其后引用的顺序。上例还可以写成/(a|b|c)(C|E|F)2g/。
PCRE正则表达式函数:
以下为引用的内容:
- preg_match()和preg_match_all()
- preg_quote()
- preg_split()
- preg_grep()
- preg_replace()
函数的具体使用,我们可以通过PHP手册来找到,下面分享一些平时积累的正则表达式:
匹配action属性
以下为引用的内容:
- $str
= ''; -
= ''; -
preg_match_all( $str, $match); -
print_r(
在正则中使用回调函数
以下为引用的内容:
-
-
callback_replace() { -
= 'http://esfang.house.sina.com.cn'; -
= ''; -
= '/(?<=saction=")(?!http:)(.*?)(?="s)/e',preg_replace ( 'search($url, \1)' ,$str ); -
-
$str; -
} -
-
search( $url,$match){ -
$url . '/'. $match; -
}
带断言的正则匹配
以下为引用的内容:
- $match
= ''; -
= 'xxxxxx.com.cnbold font paragraph
';text -
preg_match_all ( $str, $match ); -
"匹配没有属性的HTML标签中的内容:"; -
print_r ( );
替换HTML源码中的地址
以下为引用的内容:
- $form_html
= '/(?<=saction="|ssrc="|shref=")(?!http:|javascript)(.*?)(?="s)/e',preg_replace ( 'add_url($url, '\1')' ,$form_html );
最后,正则工具虽然强大,但是从效率和编写时间上来讲,有的时候可能没有explode来的更直接,对于一些紧急或者要求不高的任务,简单、粗暴的方法也许更好。
而对于preg和ereg两个系列之间的执行效率,曾看到文章说preg要更快一点提出两个DIV中的内容:
$str ='<div>name1</div><div>name2</div>';
preg_match_all('/<div>(.*?)</div>/is',$str,$match);
注:
s:
(.*?)为啥*和?写一块呢:
- PHP正则表达式的几则使用技…
- [Language-regex]PHP正则表达式的几则使用技巧
- PHP正则表达式的几则使用技巧
- PHP中正则表达式的几则使用技巧归总
- PHP正则表达式的几则使用技巧
- PHP正则表达式的几则使用技巧
- PHP 正则表达式的使用
- php使用正则表达式
- php 正则表达式使用
- PHP正则表达式使用
- php获取超链接文本内容的几款正则表达式
- php中正则表达式的使用
- PHP中正则表达式的使用
- php中的正则表达式的使用
- PHP程序中正则表达式的使用
- php正则表达式使用的详细介绍
- PHP中preg_match正则表达式的使用
- php正则表达式使用的详细介绍
- Azure Linux 虚机上配置 RAID 的常见问题及解决方案
- Memcache基础教程
- Spring Boot:定制servlet filters
- php定时计划任务介绍
- 无法打开包括源文件"extensions/cocos-ext.h" (包括无法打开cocos的任何源文件都用此方法)
- PHP正则表达式的几则使用技…
- 使用Memcache缓存MySQL查询
- mysql 5.0存储过程学习总结
- 数据库操作优化(insert、up…
- mysql索引详解
- mysql分表的3种方法
- 如何在Windows下安装听云NodeJs探针
- PHP程序员最常犯的11个MySQL…
- 现实