切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
php正则表达式[复制链接]
发表于 2013-2-7 16:54:39 | 显示全部楼层 |!read_mode!
这些天在乡下外婆家呆着 没网络,日子过得挺清闲  清静的 ,同时有些事情看了挺心痛的。
所以没事就把正则表达式教程去看了一下 写下自己的理解 以及疑问。


正则表达式就是用于描述这些规则的语法,例:在判断用户邮件地址格式、手机号码格式或者
主要的作用是:分割、匹配、查找、替换


①a-z A-Z _ 0-9  //最常见的字符
②(abc) (skd)  //用圆括号包含起来的单元符合
③[abcs] [^abd] //用方括号包含的原子表,原子表中的^代表排除或相反内容
④转义字符
  \d  包含所有数字[0-9]
  \D  除所有数字外[^0-9]
  \w  包含所有英文字符[a-zA-Z_0-9]
  \W  除所有英文字符外[^a-zA-Z_0-9]   \s   包含空白区域如回车、换行、分页等 [\f\n\r]
上面这些多操作  多使用  就很容易熟记了
下面再写2个  经常用的 匹配函数。
preg_match();
ereg();

它们的用法详细我写在下面
preg_match ($mode, $str,$arr)
$mode是正则的语法
$str是正则的内容
$arr是取得正则的结果 以数组方式存储。
$mode这里要注意的是要有//做起止符。

也许上面描述不够清晰,再写个例子吧。
<?php
$mode="/php/";
$str="A good phper";
echo "<hr>";
if (preg_match($mode,$str,$arr))
{
    echo"匹配成功.$arr[0] ";
}
    else
    {
    echo "匹配失败";
    }

?>
输出结果是  
上面一条直线
匹配成功.php
对比输出结果加前面解释 相信也应该都有一点了解啦。
$arr[0]前面我有写到过它们是以数组方式存储的  所以 后面数组加个0 就可以全部输出来了
实在不明白的 我在这里推荐使用一个函数  print_r  可以直接打印出它的结果  便于理解  像我这种新手必备哇。
上面是最简单的匹配    匹配数字也是同样道理的。
ereg -- 正则表达式匹配
说明
int ereg ( string pattern, string string [, array &regs] )

这个是php手册的解释    用法和上面的preg_match很相近的


最后请教他们的  区别
preg_match();
ereg();




发表于 2013-2-7 17:07:33 | 显示全部楼层
首先要说明的是在PHP5.3里边ereg家族已经逐渐被preg替代了

preg,代表“Perl的正则表达式(Perl Regular Expressions)”。
ereg,代表“扩展的正则表达式(Extended Regular Expressions)”。
这两组函数的主要区别有:
1.preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如".....";
2.在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
3.preg_replace()能操作数组,而ereg_replace()不可以
4.ereg默认使用贪婪模式,并且不能修改
5.preg 的速度比 ereg 要快很多
还有一些区别就需要自己慢慢发现了,总之preg完胜ereg。

这篇文章总结的很好!keep moving

发表于 2013-5-15 22:19:55 | 显示全部楼层
太漂亮了,收藏了
发表于 2013-5-16 12:57:10 | 显示全部楼层
抚菊深思 发表于 2013-2-7 17:07
首先要说明的是在PHP5.3里边ereg家族已经逐渐被preg替代了

preg,代表“Perl的正则表达式(Perl Regular ...

貌似  与perl兼容的正则表达式的 定界符  是可以随意 指定的  //    ##    !!    都是ok的
发表于 2013-5-16 20:28:48 | 显示全部楼层
蜀山野鬼 发表于 2013-5-16 12:57
貌似  与perl兼容的正则表达式的 定界符  是可以随意 指定的  //    ##    !!    都是ok的

嗯   记得好像是可以非字母数字下划线后随意
但没见过谁搞这么蛋疼的随意
发表于 2014-7-4 11:41:42 | 显示全部楼层
正则确实一个必须要熟练的知识点啊
发表于 2014-7-17 13:23:45 | 显示全部楼层
正则其实也势利,削尖头来把钱揣;(指开始符号^和结尾符号$)
特殊符号认不了,弄个倒杠来引路;(指\. \*等特殊符号)
倒杠后面跟小w, 数字字母来表示;(\w跟数字字母;\d跟数字)
倒杠后面跟小d, 只有数字来表示;
倒杠后面跟小a, 报警符号嘀一声;
倒杠后面跟小b, 单词分界或退格;
倒杠后面跟小t, 制表符号很明了;
倒杠后面跟小r, 回车符号知道了;
倒杠后面跟小s, 空格符号很重要;
小写跟罢跟大写,多得实在不得了;
倒杠后面跟大W, 字母数字靠边站;
倒杠后面跟大S, 空白也就靠边站;
倒杠后面跟大D, 数字从此靠边站;
倒框后面跟大B, 不含开头和结尾;
单个字符要重复,三个符号来帮忙;(* + ?)
0 星加1 到无穷,问号只管0 和1; (*表0-n;+表1-n;?表0-1次重复)
花括号里学问多,重复操作能力强;({n} {n,} {n,m})
若要重复字符串,园括把它括起来;((abc){3} 表示字符串“abc”重复3次 )
特殊集合自定义,中括号来帮你忙;
转义符号行不通,一个一个来排队;
实在多得排不下,横杠请来帮个忙;([1-5])
尖头放进中括号,反义定义威力大;([^a]指除“a”外的任意字符 )
1竖作用可不小,两边正则互替换; (键盘上与“\”是同一个键)
1竖能用很多次,复杂定义很方便;
园括号,用途多;
反向引用指定组,数字排符对应它;(“\b(\w+)\b\s+\1\b”中的数字“1”引用前面的“(\w+)”)
支持组名自定义,问号加上尖括号;(“(?\w+)”中把“\w+”定义为组,组名为“Word”)
园括号,用途多,位置指定全靠它;
问号等号字符串,定位字符串前面;(“\b\w+(?=ing\b)”定位“ing”前面的字符串)
若要定位串后面,中间插个小于号;(“(?<=\bsub)\w+\b”定位“sub”后面的字符串)
问号加个惊叹号,后面跟串字符串;
PHPer都知道, !是取反的意思;
后面不跟这一串,统统符合来报到;(“\w*d(?!og)\w*”,“dog”不符合,“do”符合)
问号小于惊叹号,后面跟串字符串;
前面不放这一串,统统符合来报到;
点号星号很贪婪,加个问号不贪婪;
加号问号有保底,至少重复一次多;
两个问号老规矩,0次1次团团转;
花括号后跟个?,贪婪变成不贪婪;
发表于 2014-7-26 23:53:27 | 显示全部楼层
叼叼叼。很吊。

代码区

GMT+8, 2019-11-17 08:38

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部