58cms谈谈正则表达式
2019-03-10 浏览:183次 作者:成都晨宇网络科技公司
-正则表达式
/love/-正则表达式格式,要匹配的字符在//之间
-元字符一
"+"-表示前导字符必须在目标中连续出现一次或者多次
"*"-表示前导字符必须在目标中出现零次或者连续多次
"?"-标识前导字符必须在目标中连续出现零次或者一次
/fo+/-可以匹配:fool,fo,football等字符串
/eg*/-可以匹配:easy,ego,egg等字符串
/wil?/-可以匹配:win,wison等字符串
/jim{2,6}/-可以匹配:jimmy,jimmmmmmk等在ji后面出现2个到6个m的字符
-{}中规定前导字符出现的频率
=+=-javascript中,{}后面不能有链接符号"+",后面的内容直接跟就是了
-元字符二
\s-用于匹配单个空格符,包括tab键和换行符
\S-用于匹配单个空格符之外的所有字符
\d-用于匹配从0到9的数字
\w-用于匹配字母,数字或者下划线字符
\W-用于匹配所有与\w不匹配的字符
.-用于匹配除换行符之外的所有字符及所有的单一字符
-可以把\s和\S,\w和\W看作互为逆运算
=+=在javascript中,元字符前面不能有链接字符"+",直接跟在前面内容之后就可以了
/\s+/-可以用来匹配目标对象中的一个或者多个空格字符
/\d000/-可以用来匹配所有小于10000的整千数
-定位符
"^"-表示规定匹配模式必须出现在目标字符串的开头
"$"-表示规定模式必须出现在咪表字符串的结尾
"\b"-表示规定匹配模式必须出现在目标字符串的开头或者结尾两个边界之一
"\B"-表示规定匹配模式必须在目标字符串的开头和结尾两个边界之内
/^hell/-可以匹配以hell,hello或者hellhound等开头的字符串
/ar$/-可以匹配var,car,bar等以ar结尾的字符串
/\bbom/-可以匹配bomb,bomy等以bom开头的字符串
/man\b/-可以匹配woman,human等以man结尾的字符串
-规定范围的匹配模式
/[A-Z]/-将和A到Z范围内任何一个大写字母相匹配
/[a-z]/-将和a到z范围内任何一个小写字母相匹配
/[0-9]/-将和0到9范围内任何一个数字相匹配
/([a-z][A-Z][0-9])+/-可以匹配由字母和数字组成的字符串
"|"-管道符"或"
/to|too|2/-将与目标对象当中的to,too,2相匹配
"[^]"-管道符"否定"
/[^a-c]/-与目标字符串中除a,b,c之外的任何字符相匹配
-当"^"出现在[]内我们就认为是否定符,在[]之外或者没有[]就为定位符
-转义字符,用于匹配字符串中的元字符
/Th\*/-匹配Th*,而不能匹配The.
-perl风格
写法://或者!!
效率高
方向引用个数:99,用$
执行表达式,函数不同
preg_match_all()
preg_match()
preg_replace()
preg_split()
-posix风格
写法:不加定界符
效率低
反向引用的个数:9,用\\
不支持:\d,\w等
ereg()
eregi()
ereg_replace()
eregi_replace()
split()
spliti()
-表达式里面的反向引用
\\n表示之前的n个子表达式
如匹配HTML的表达式:/<(.*)>.*<\/\\1>|<(.*)\/>/
-将反向引用用在替换里
$n表示表达式里面的第n个子表达式
如时间的转化:$a=
"11/11/2012";preg_replace("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/","$3-$1-$2",$a)
-?应用
-(?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用"或"字符(|)
来组合一个模式的各个部分是很有用。例如,'industr(?:y|ies)就是一个比'industry|industries'更简略的表达式。
-(?=pattern)正向预查,在任何匹配pattern
的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows(?=95|98|NT|2000)'能匹配
"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的
"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
-(?!pattern)负向预查,在任何不匹配pattern
的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)'能匹配
"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的
"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
ereg(pattern,string)-PHP使用正则表达式的函数
-pattern表示正则表达式的匹配模式,string表示查找替换的目标对象及目标字符串
-匹配邮件地址的正则表达式实例
if(ereg("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+",$email))
{
echo"你的邮件地址正确";
}
else
{
echo"你的邮件地址错误";
}
?>
$ereg_t=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if(ereg($ereg_t,$email))
{
echo"你的邮件地址正确";
}
else
{
echo"你的邮件地址错误";
}
?>
-提取字符串
$url="c:\one\two\123.jpg";
ereg("([^\\]*)$",$url,$regs);//提取url中的文件名
echo$regs[1];
?>
-高级替换
ereg_replace($pattern,$dai,$string)-$pattern中不能包括//;
$pattern="[a-zA-Z]+";//这样的表示适用于ereg_replace()
preg_replace($pattern,$dai,$string)
$pattern="/[a-zA-Z]+/";//这样的表示适用于preg_replace()
$abc="我是皇帝哦,你是皇后";
$bcd=array("/(皇帝)+/","/(皇后)+/");
$length=count($bcd);//count计算数组元素的个数
for($i=0;$i<$length;$i++)
{
$abc=preg_replace($bcd,"**",$abc);
}
echo$abc;
echo"
";
?>
--php函数集合内片段:--
-preg_..和ereg_..系列函数功能几乎相同,但preg_..速度更快
-ereg_..系列函数在PHP5.3以后不再使用
preg_match()-进行正则表达式匹配
if(preg_match("/php/i","PHPisthewebscriptintlangugeofchoice."))
{
print"found";
}else
{
print"notfound";
}//"/php/i"中的i表示不区分大小写字母的匹配
-"/\bweb\b/i"这个匹配模式中的\b表示单词的边界,因此只能匹配独立的"web"单词
-匹配模式
i:不区分大小写
s:.中包括换行符
u:禁止表达式最大长度匹配及{3,}只匹配3个
preg_split()-将字符串分割成数组的形式
$str='onetwotree';
$chars=preg_split('//',$str,-1);//-1表示可以分割为无限长度的数组元素
print_r($chars);//$chars的到的数组元素有:one,two,tree
preg_replace(pattetn,replacement,subject,limit)-执行正则表达式的匹配和替换
-按照pattentn匹配模式在subject中匹配,并替换为replacement,如果指定了limit,则只替换limit个匹配
$string="thereonetwotreefour";
$patten=array("/\sone/","/\stwo/","/\stree\s/");
$replacement=array("1","2","3");//\s匹配单个空格字符或者tab健
printpreg_replace($patten,$replacement,$string);//输出:there123four
注:成都晨宇网络科技公司自由网络,专业提供网站推广服务,有需要咨询欢迎联系我们在线客服。