php正则表达式2,求问各种正则表达式后缀的意义解决方案(2)

当前位置:我的异常网» PHP » 求问各种正则表达式后缀的意义解决方案

求问各种正则表达式后缀的意义解决方案(2)

www.myexceptions.net  网友分享于:2015-08-26  浏览:6次

"/ he/ ":空格开头,和^的作用一样,匹配以he开头的字符串;

"/he / ":空格结束,和$的作用一样,匹配以he结尾的字符串;

"/^he$/ ":表示只和字符串 "he "匹配。

括号:

正则表达式除了可以用户匹配,还可以用括号 "() "来记录需要的信息,储存起来,给后面的表达式读取。比如:

/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/

就是记录邮件地址的用户名,和邮件地址的服务器地址(形式为username@server.com之类的),在后面如果想要读取记录下来的字符串,只是需要用 "转义符+记录的次序 "来读取。比如 "\1 "就相当于第一个 "[a-zA-Z0-9_-]+ ", "\2 "相当于第二个([a-zA-Z0-9_-]+), "\3 "就是第三个(.[a-zA-Z0-9_-])。但是在PHP中, "\ "是一个特殊的字符,需要转义,所以 " "到了PHP的表达式中就应该写成 "\\1 "。

其他特殊符号:

"| ":或符号 "| "和PHP里面的或一样,不过是一个 "| ",而不是PHP的两个 "|| "!意思就是可以是某个字符或者另一个字符串,比如 "/abcd|dcba/ "可能匹配 "abcd "或者 "dcba "。

------解决方案--------------------

5 贪婪模式:

前面在元字符中提到过 "? "还有一个重要的作用,即 "贪婪模式 ",什么是 "贪婪模式 "呢?

比如我们要匹配以字母 "a "开头字母 "b "结尾的字符串,但是需要匹配的字符串在 "a "后面含有很多个 "b ",比如 "a bbbbbbbbbbbbbbbbb ",那正则表达式是会匹配第一个 "b "还是最后一个 "b "呢?如果你使用了贪婪模式,那么会匹配到最后一个 "b ",反之只是匹配到第一个 "b "。

使用贪婪模式的表达式如下:

/a.+?b/

/a.+b/U

不使用贪婪模式的如下:

/a.+b/

上面使用了一个修饰符U,详见下面的部分。

6 修饰符:

在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着 "e "并不等于 "E ")。正则表达式里面的修饰符如下:

i :如果在修饰符中加上 "i ",则正则将会取消大小写敏感性,即 "a "和 "A " 是一样的。

m:默认的正则开始 "^ "和结束 "$ "只是对于正则字符串如果在修饰符中加上 "m ",那么开始和结束将会指字符串的每一行:每一行的开头就是 "^ ",结尾就是 "$ "。

s:如果在修饰符中加入 "s ",那么默认的 ". "代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!

x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。

e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。

A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说 "/a/A "匹配 "abcd "。

E:与 "m "相反,如果使用这个修饰符,那么 "$ "将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。

U:和问号的作用差不多,用于设置 "贪婪模式 "。

7 PCRE相关的正则表达式函数:

PHP的Perl兼容正则表达式提供的多个函数,分为模式匹配,替换和匹配数目等等:

1、preg_match :

函数格式:int preg_match(string pattern, string subject, array [matches]);

这个函数会在string中使用pattern表达式来匹配,如果给定了[regs],就会将string记录到[regs][0]中,[regs][1]代表使用括号 "() "记录下来的第一个字符串,[regs][2]代表记录下来的第二个字符串,以此类推。preg如果在string中找到了匹配的pattern,就会返回 "true ",否则返回 "false "。

2、preg_replace :

函数格式:mixed preg_replace(mixed pattern, mixed replacement, mixed subject);

这个函数会使用将string中符合表达式pattern的字符串全部替换为表达式replacement。如果replacement中需要包含pattern的部分字符,则可以使用 "() "来记录,在replacement中只是需要用 "\1 "来读取。

3、preg_split :

函数格式:array preg_split(string pattern, string subject, int [limit]);

这个函数和函数split一样,区别仅在与split可以使用简单正则表达式来分割匹配的字符串,而preg_split使用完全的Perl兼容正则表达式。第三个参数limit代表允许返回多少个符合条件的值。

4、preg_grep :

函数格式:array preg_grep(string patern , array input);

这个函数和preg_match功能基本上,不过preg_grep可以将给定的数组input中的所有元素匹配,返回一个新的数组。

下面举一个例子,比如我们要检查Email地址的格式是否正确:

function emailIsRight($email) {

if (preg_match( "^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$ ",$email)) {

return 1;

}

return 0;

}

if(emailIsRight( 'y10k@963.net ')) echo '正确
';

if(!emailIsRight( 'y10k@fffff ')) echo '不正确
';

?>

上面的程序会输出 "正确
不正确 "。

8.PHP中的Perl兼容正则表达式和Perl/Ereg正则表达式的区别:

虽然叫做“Perl兼容正则表达式”,但是和Perl的正则表达式相比,PHP的还是由一些不同,比如修饰符“G”在Perl里面代表全部匹配,但是在PHP中没有加入对这个修饰符的支持。

还有就是和ereg系列函数的区别,ereg也是PHP中提供的正则表达式函数,不过和preg相比,要弱上很多。

1、ereg里面是不需要也不能使用分隔符和修饰符的,所以ereg的功能比preg要弱上不少。

文章评论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值