php正则表达式实例,史上最全PHP正则表达式实例汇总大全(3)

/manb/

因为上述正则表达式模式以“b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。

为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:

/[A-Z]/

上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。

/[a-z]/

上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。

/[0-9]/

上述正则表达式将会与从0到9范围内任何一个数字相匹配。

/([a-z][A-Z][0-9])+/

上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。

“()”符号:包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。

如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符: “|”。例如:

/to|too|2/

上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。

否定符:“[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:

/[^A-C]/

上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。

最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用

转义符:“”。例如:

/Th*/

上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

实际经验介绍

还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明:

“^The”:开头一定要有”The”字符串;

“of despair$”:结尾一定要有”of despair” 的字符串;

那么,

“^abc$”:就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配;

“notice”:匹配包含notice的字符串;

你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边。

接着,说说 ‘*' ‘+' 和 ‘?'

他们用来表示一个字符可以出现的次数或者顺序,他们分别表示:

“zero or more”相当于{0,}

“one or more”相当于{1,}

“zero or one.”相当于{0,1}

这里是一些例子:

“ab*”:和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串(”a”, “ab”, “abbb”, 等);

“ab+”:和ab{1,}同义,同上条一样,但最少要有一个b存在 (”ab” “abbb”等);

“ab?”:和ab{0,1}同义,可以没有或者只有一个b;

“a?b+$”:匹配以一个或者0个a再加上一个以上的b结尾的字符串。

要点:'*' ‘+' 和 ‘?' 只管它前面那个字符。

你也可以在大括号里面限制字符出现的个数,比如:

“ab{2}”: 要求a后面一定要跟两个b(一个也不能少)(”abb”);

“ab{2,}”: 要求a后面一定要有两个或者两个以上b(如”abb” “abbbb” 等);

“ab{3,5}”: 要求a后面可以有2-5个b(”abbb”, “abbbb”, or “abbbbb”)。

现在我们把一定几个字符放到小括号里,比如:

“a(bc)*”: 匹配 a 后面跟0个或者一个”bc”;

“a(bc){1,5}”: 一个到5个 “bc”;

还有一个字符 ‘|',相当于OR操作:

“hi|hello”: 匹配含有”hi” 或者 “hello” 的 字符串;

“(b|cd)ef”: 匹配含有 “bef” 或者 “cdef”的字符串;

“(a|b)*c”: 匹配含有这样多个(包括0个)a或b,后面跟一个c的字符串;

一个点('.')可以代表所有的单一字符,不包括” ”

如果,要匹配包括” ”在内的所有单个字符,怎么办?

用'[ .]'这种模式。

“a.[0-9]”: 一个a加一个字符再加一个0到9的数字;

“^.{3}$”: 三个任意字符结尾。

中括号括住的内容只匹配一个单一的字符

“[ab]”: 匹配单个的 a 或者 b ( 和 “a│b” 一样);

“[a-d]”: 匹配'a' 到'd'的单个字符 (和”a│b│c│d” 还有 “[abcd]”效果一样);

一般我们都用[a-zA-Z]来指定字符为一个大小写英文:

“^[a-zA-Z]”: 匹配以大小写字母开头的字符串;

“[0-9]%”: 匹配含有 形如 x% 的字符串;

“,[a-zA-Z0-9]$”: 匹配以逗号再加一个数字或字母结尾的字符串;

你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 “%[^a-zA-Z]%” 匹配含有两个百分号里面有一个非字母的字符串。

要点:^用在中括号开头的时候,就表示排除括号里的字符。

为了PHP能够解释,你必须在这些字符面前后加”,并且将一些字符转义。

不要忘记在中括号里面的字符是这条规路的例外—在中括号里面,所有的特殊字符,包括(”),都将失去他们的特殊性质 “[*+?{}.]”匹配含有这些字符的字符串:

还有,正如regx的手册告诉我们:”如果列表里含有']',最好把它作为列表里的第一个字符(可能跟在'^'后面)。如果含有'-',最好把它放在最前面或者最后面

, or 或者一个范围的第二个结束点[a-d-0-9]中间的‘-'将有效。

看了上面的例子,你对{n,m}应该理解了吧。要注意的是,n和m都不能为负整数,而且n总是小于m。这样,才能 最少匹配n次且最多匹配m次。如”p{1,5}”将匹配

“pvpppppp”中的前五个p

下面说说以开头的

b 书上说他是用来匹配一个单词边界,就是…比如'veb',可以匹配love里的ve而不匹配very里有ve

B 正好和上面的b相反。

正则表达式的其他用法

提取字符串

ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册)。比如说,我们想从 path/URL 提取文件名,下面的代

码就是你需要:

ereg(”([^\/]*)$”, $pathOrUrl, $regs);

echo $regs[1];

高级的代换

ereg_replace() 和 eregi_replace()也是非常有用的,假如我们想把所有的间隔负号都替换成逗号:

ereg_replace(”[ t]+”, “,”, trim($str));

preg_match()和preg_match_all()

preg_quote()

preg_split()

preg_grep()

preg_replace()

函数的具体使用,我们可以通过PHP手册来找到,下面分享一些平时积累的正则表达式:

匹配action属性

$str = '';

$match = '';

preg_match_all('/s+action="(?!http:)(.*?)"s/', $str, $match);

print_r($match);

在正则中使用回调函数

/**

* replace some string by callback function

*

*/

function callback_replace() {

$url = 'http://esfang.house.sina.com.cn';

$str = '';

$str = preg_replace ( '/(?<=saction=")(?!http:)(.*?)(?="s)/e', 'search($url, \1)', $str );

echo $str;

}

function search($url, $match){

return $url . '/' . $match;

}

带断言的正则匹配

$match = '';

$str = 'xxxxxx.com.cn bold font

paragraph text

';

preg_match_all ( '/(?<=).*(?=1>)/', $str, $match );

echo "匹配没有属性的HTML标签中的内容:";

print_r ( $match );

替换HTML源码中的地址

$form_html = preg_replace ( '/(?<=saction="|ssrc="|shref=")(?!http:|javascript)(.*?)(?="s)/e', 'add_url($url, '\1')', $form_html );

元字符

在上面的例子中,^ 、d 及 $ 等这些符号,代表了特定的匹配意义,我们称之为元字符,常用的元字符如下:

元字符 说明

. 匹配除换行符意外的任意字符

w 匹配字母或数字或下划线

s 匹配任意的空白符

d 匹配数字

b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

[x] 匹配x字符,如匹配字符串中的 a、b 和 c 字符

W w的反义,即匹配任意非字母,数字,下划线和汉字的字符

S s的反义,即匹配任意非空白符的字符

D d的反义,即匹配任意非数字的字符

B b的反义,即不是单词开头或结束的位置

[^x] 匹配除了 x 意外的任意字符,如 [^abc] 匹配除了 abc 这几个字母之外的任意字符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值