php的Perl风格正则表达式笔记
又浪费了2天,下面记一下刚看的perl的正则表达式吧
匹配xuandun
/xuandun/
匹配xuandun加后面跟一个或多个字符
/xuandun+/
匹配xuandun加后面2-4个n字符(例如xuandunn xuandunnnn)
/xuandun{2,4}/
1.修饰符
i?完全不区分大小写
g?查找所有出现(全局搜索)
m?默认的正则开始”^”和结束”$”只是对于正则字符串如果在修饰符中加上”m”,那么开始和结束将会指字符串的每一行:每一行的开头就是”^”,结尾就是”$”。
s?将字符串视为一行,忽略其中的换行符,与m正好相反
x?忽略空白和注释
u?第一匹配后,就停止,不让他们贪婪的尽可能完成匹配
这些修饰符应该放在正则表达式后面/xuandun/i 还可以组合使用 /xuandun/gi
2.元字符
\A?只匹配字符串开通
\b?匹配单词边界
\B?匹配除了边界外的字符
\d?匹配数字
\D?匹配非数字
\s?匹配空白字符
\S?匹配非空白字符
[]?包围字符类
()?包围字符分组
$?匹配行尾
^?匹配行首
.?匹配换行以外的字符
\?引用下一个元字符
\w?匹配只包含字母数字下划线的字符串
\W?匹配没有下划线字母数字的字符串
比如,匹配pisa和lisa这样的字符串,不要sand这样的字符串
/sa\b/
匹配xuandun第一次出现,不区分大小写
/\bxuandun\b/i
\B与单词边界字符相反,匹配除单词边界之外任意字符。应该匹配sand sally这样的字符串,而不能匹配melissa
/sa\b/
例如返回满足条件:字符串包含一个美元符号,后面跟一个或多个数字
/\$\d+\g
下面是兼容perl的正则表达式函数
3.搜索字符串preg_grep,例如匹配j开头的名字
$names=array("tom","jim","andy","jack");
$name=preg_grep("/^j/",$names);
print_r($name);
4.preg_match语句,搜索条件存在与否返回布尔值,查手册不举例了
5.preg_match_all 匹配所有出现。第一个参数为正则表达式,二个是字符串,第三个是存储为的数组
$names="name:<b>andy</b><br><b>tom</b>";
preg_match_all("/<b>(.*)<\/b>/U",$names,$name);
printf("%s?<br?/>?%s",$name[0][0],$name[0][1]);
6.preg_quote对于特殊含义的字符前插入反斜线,以便后续使用,当然也可指定界定符
$text?=?"tickets?for?the?bout?are?going?for?$500.";
echo?preg_quote($text);
为美元符号和点都加了反斜杠
7.替换符合条件的所有出现preg_replace语句,与ereg_replace相同,只是前者基于perl表达式罢了,例子不举了 查手册
8.不区分大小写将字符串划分为不同元素preg_split语句,与split基本相同,手册自查
9.创建指定的替换函数preg_replace_callback自查手册吧