伤羽博客

新浪微博腾讯微博关注微信QQ交谈

最新碎语:新工作新起点,加油加油加油!!!

您的位置:伤羽博客 >PHP> php正则匹配的相关知识总结

php正则匹配的相关知识总结

一、php正则简介

PHP中有两套正则匹配规则,一套基于POSIX,一套基于PCRE(英文全称:Perl Compatible Regular Expressions;翻译后就是“perl兼容正则表达式”,简称PCRE正则);自 PHP 5.3.0起, POSIX 正则表达式扩展被废弃,所以目前一般说PHP正则就是指PCRE正则。

PHP中主要的的正则表达式函数如下:

1.1、正则替换函数

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

函数功能:搜索subject中匹配pattern的部分, 以replacement进行替换。

此函数还有变体:

mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

这个函数的行为除了 可以指定一个 callback 替代 replacement 进行替换 字符串的计算,其他方面等同于 preg_replace()

还有一个类似的函数:

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

preg_filter()等价于preg_replace() 除了它仅仅返回(可能经过转化)与目标匹配的结果

1.2、执行一个正则匹配

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

搜索subject与pattern给定的正则表达式的一个匹配。

此函数也有类似函数:

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中。

执行一个全局正则表达式匹配。

1.3、通过一个正则表达式分隔字符串

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

通过一个正则表达式分隔给定字符串。
还有几个函数就不再详细介绍了:

array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
string preg_quote ( string $str [, string $delimiter = NULL ] )

二、正则表达式的语法规则

汇总知识点

元字符 含义或用法
^
匹配字符串的开始位置标记
$ 匹配字符串的结束位置标记
\ 转义字符;将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次
{n}
n 是一个非负整数。匹配确定的 n 次
{n,}
n 是一个非负整数。至少匹配n 次
{n,m}
m 和 n 均为非负整数,其中n <= m ,表示最少匹配 n 次且最多匹配 m 次
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
[xyz]
字符集合。匹配所包含的任意一个字符
[^xyz]
负值字符集合。匹配未包含的任意字符,与前一个[xyz]意义刚好相反。
[a-z]
字符范围。匹配指定范围内的任意字符;匹配a到z的所有小写字母;同理取反[^a-z]
\b
匹配一个单词边界,也就是指单词和空格间的位置;这个多用于英文语句中的单词与单词间的空白匹配
\B
匹配非单词边界;与\b意义相反
\d
匹配一个数字字符。等价于 [0-9];同理取反\D (注意大小写,后续不再提示)
\f
匹配一个换页符。等价于 \x0c 和 \cL
\n
匹配一个换行符。等价于 \x0a 和 \cJ
\r
匹配一个回车符。等价于 \x0d 和 \cM
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v];同理取反\S
\t
匹配一个制表符。等价于 \x09 和 \cI
\v
匹配一个垂直制表符。等价于 \x0b 和 \cK
\w
匹配数字、字母和下滑线(也就是英文单词的构成成分)等价于[A-Za-z0-9_];同理取反\W

三、实际应用举例

3.1、匹配html标签中的标记

也就是匹配由尖括号包裹起来的标签,如匹配<p>(也会匹配<p style="text-indent:2em">之类的有属性的p标签)

<p[^>]+>

3.2、去除html源代码中的换行符、制表符、回车等符号

$str=preg_replace("/[\t\n\r]+/","",$str);

3.3、效验字符串全部由数字构成;这种匹配不一定表示字符串是自然数,因为可能回事0开头

/^[0-9]{1,20}$/

3.4、其他的正则汇总

  1. "^\d+$"  //非负整数(正整数 + 0) 
  2. "^[0-9]*[1-9][0-9]*$"  //正整数 
  3. "^((-\d+)|(0+))$"  //非正整数(负整数 + 0) 
  4. "^-[0-9]*[1-9][0-9]*$"  //负整数 
  5. "^-?\d+$"    //整数 
  6. "^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)
  7. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
  8. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
  9. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
  10. "^(-?\d+)(\.\d+)?$"  //浮点数
  11. "^[A-Za-z]+$"  //由26个英文字母组成的字符串
  12. "^[A-Z]+$"  //由26个英文字母的大写组成的字符串
  13. "^[a-z]+$"  //由26个英文字母的小写组成的字符串
  14. "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
  15. "^\w+$"  //由数字、26个英文字母或者下划线组成的字符串
  16. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址
  17. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url
  18. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日
  19. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年
  20. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Emil
  21. "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"     //电话号码
  22. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   //IP地址
  23. ^([0-9A-F]{2})(-[0-9A-F]{2}){5}$   //MAC地址的正则表达式
  24. ^[-+]?\d+(\.\d+)?$  //值类型正则表达式

转载于晶晶的博客


版权申明:此文如未标注转载则为伤羽原创,转载请注明出自伤羽博客

本文网址:http://www.shangyu520.com/post-5.html

发表评论

游客 表情
Ctrl+Enter快速提交

网友评论(2)

不错
浩浩4年前 (2015-08-01) 回复
自己都没看懂
伤羽4年前 (2015-07-31) 回复