php 正则表达式 基本知识

“^The” :  以”The”开头
“of despair$” :   以”of despair”结尾
“^abc$” :    字符串”abc”
“notice”  :   包含”notice”的字符串
就像最后一个例子一样,如果没有定义边界符号,就相当于在当前字符串里查找该字符串。

最常用的”*”,”+”,”?”分别指”出现0次或多次”,”出现1次或多次”,”出现0次或1次”

“ab*”:匹配”a”,”ab”,”abbb”
“ab+”:匹配”ab”,”abbb”,不匹配”a”
“ab?”:没有”b”,或者只有一个”b”
“a?b+$”:以字符b结尾(a?可以忽略)


也可以定义个数,这个是以大括号来表现的


“ab{2}”:只匹配”abb”
“ab{2,}”:至少有2个b
“ab{3,5}”: b的个数在3-5之间,包括3,5
必须指定第一个参数,如{,3}是无效的


现在合并在一起来看看


“a(bc)*”:匹配一个字符串,这个字符串必须以a或者n个bc结尾,如”a,abc,abcbc”
“a(bc){1,5}”:bc字符串可以出现

“|”表示的关系是”或”

“hi|hello”:匹配hi或者hello
“(b|cd)ef”:一个包含”bef”或者”cdef”的字符串
“(a|b)*c”:字符串可以包含”ac”,”bc”,”c”,”aac”

“.”用来匹配任意单个字符
“a.[0-9]”:这个字符串只要以a开头数字结尾就行,中间可以是任意数,当然只能有一个
“^.{3}$”:匹配任意3个字符

中括号说明单个字符的类型

“[ab]”:匹配一个字符串,这个字符串只能包含a或者b
“[a-d]”:这个字符串可以包含a到d之间的字母
“^[a-zA-Z]”:以字母开头
“[0-9]%”:0%-9%
“,[a-zA-Z0-9]$”:以单个字母或数字结束,但前面必须要有个逗号
也可以列出不想要的字符,用”^”就可以了
“%[^a-zA-Z]%”: 两个%之间,只要不是字母就行

为了避免错误,系统的关键符号需要转义”^.[$()|*+?{/”,加上一个”/”就行了

例1:有效的正则

* /<///w+>/

* |(/d{3})-/d+|Sm

* /^(?i)php[34]/

* {^/s+(/s+)?$}

例2:无效的正则

* /href=’(.*)’ - 没有定义结束符号

* //w+/s*/w+/J - 参数J,无意义

* 1-/d3-/d3-/d4| - 缺少开始符号

----------------------------------------------------------------------

一些有用的php函数,以及一些例子

preg_split


array preg_split ( string pattern, string subject [, int limit [, int flags]])

 


演示1:以空格,逗号,回车,tab为分割符,分割字符串

php代码


$keywords = preg_split ("/[/s,/n/r]+/", "hypertext language, programming");


演示2:取得组成字符串的字母

php代码
<?php
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>

 

演示3:分割一个字符串,同时取得它在原字符串中的位置

php代码
<?php
$str = 'hypertext language programming';
$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>

结果输出

php代码
Array
(
[0] =&gt; Array
(
[0] =&gt; hypertext
[1] =&gt; 0
)

preg_match

 

演示1:寻找字符串”php”,参数"i"忽略大小写

php代码
if (preg_match ("/php/i", " php is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}


演示2:寻找单词”web” /b定义边界符

php代码
<?php
if (preg_match ("//bweb/b/i", "php is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}

?>

演示3:得到一个url的域名信息
php代码
preg_match("/^(http:)?([^//]+)/i",
"<a href="http://www.ai-mei.com/index.html">http://www.ai-mei.com/index.html</a>", $matches);
$host = $matches[2]; // 取得域名的最后两位
preg_match("/[^/.//]+/.[^/.//]+$/", $host, $matches);
echo "domain name is: {$matches[0]}/n";

---------------------------------------------------------------------------------

模式语法

/a
alarm,即 BEL 字符(0x07)

/cx
"control-x",其中 x 是任意字符

/e
escape(0x1B)

/f
换页符 formfeed(0x0C)

/n
换行符 newline(0x0A)

/r
回车符 carriage return(0x0D)

/t
制表符 tab(0x09)

/xhh
十六进制代码为 hh 的字符

/ddd
八进制代码为 ddd 的字符,或 backreference

/d
任一十进制数字

/D
任一非十进制数的字符

/s
任一空白字符

/S
任一非空白字符

/w
任一“字”的字符

/W
任一“非字”的字符

/b
字分界线

/B
非字分界线

/A
目标的开头(独立于多行模式)

/Z
目标的结尾或位于结尾的换行符前(独立于多行模式)

/z
目标的结尾(独立于多行模式)

/G
目标中的第一个匹配位置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值