原文:http://weblogtoolscollection.com/regex/regex.php 翻译:http://www.phpangel.cn/php/php-regex.html
基本语法:
“^The” : 以”The”开头 “of despair$” : 以”of despair”结尾 “^abc$” : 字符串”abc” “notice” : 包含”notice”的字符串 就像最后一个例子一样,如果没有定义边界符号,就相当于在当前字符串里查找该字符串。
最常用的”*”,”+”,”?”分别指”出现0次或多次”,”出现1次或多次”,”出现0次或1次”
“ab*”:匹配”a”,”ab”,”abbb” “ab+”:匹配”ab”,”abbb”,不匹配”a” “ab?”:没有”b”,或者只有一个”b” “a?b+$”:以字符b结尾(a?可以忽略)
也可以定义个数,这个是以大括号来表现的
“ab{2}”:只匹配”abb” “ab{2,}”:至少有2个b “ab{3,5}”: b的个数在3-5之间,包括3,5 必须指定第一个参数,如{,3}是无效的
现在合并在一起来看看
“a(bc)*”:匹配一个字符串,这个字符串必须以a或者n个bc结尾,如”a,abc,abcbc” “a(bc){1,5}”:bc字符串可以出现
“|”表示的关系是”或”
“hi|hello”:匹配hi或者hello “(b|cd)ef”:一个包含”bef”或者”cdef”的字符串 “(a|b)*c”:字符串可以包含”ac”,”bc”,”c”,”aac”
“.”用来匹配任意单个字符 “a.[0-9]”:这个字符串只要以a开头数字结尾就行,中间可以是任意数,当然只能有一个 “^.{3}$”:匹配任意3个字符
中括号说明单个字符的类型
“[ab]”:匹配一个字符串,这个字符串只能包含a或者b “[a-d]”:这个字符串可以包含a到d之间的字母 “^[a-zA-Z]”:以字母开头 “[0-9]%”:0%-9% “,[a-zA-Z0-9]$”:以单个字母或数字结束,但前面必须要有个逗号 也可以列出不想要的字符,用”^”就可以了 “%[^a-zA-Z]%”: 两个%之间,只要不是字母就行
为了避免错误,系统的关键符号需要转义”^.[$()|*+?{\”,加上一个”\”就行了
例1:有效的正则
* /<\/\w+>/
* |(\d{3})-\d+|Sm
* /^(?i)php[34]/
* {^\s+(\s+)?$}
例2:无效的正则
* /href=’(.*)’ - 没有定义结束符号
* /\w+\s*\w+/J - 参数J,无意义
* 1-\d3-\d3-\d4| - 缺少开始符号
一些有用的php函数,以及一些例子
preg_split
array preg_split ( string pattern, string subject [, int limit [, int flags]])
演示1:以空格,逗号,回车,tab为分割符,分割字符串
php代码
$keywords = preg_split ("/[\s,\n\r]+/", "hypertext language, programming");
演示2:取得组成字符串的字母
php代码 <?php $str = 'string'; $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); print_r($chars); ?>
演示3:分割一个字符串,同时取得它在原字符串中的位置
php代码 <?php $str = 'hypertext language programming'; $chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); print_r($chars); ?>
结果输出
php代码 Array ( [0] => Array ( [0] => hypertext [1] => 0 )
preg_match
演示1:寻找字符串”php”,参数"i"忽略大小写
php代码 if (preg_match ("/php/i", " php is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; }
演示2:寻找单词”web” \b定义边界符
php代码 <?php if (preg_match ("/\bweb\b/i", "php is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; }
?>
演示3:得到一个url的域名信息 <code>php代码 preg_match("/^(http:\/\/)?([^\/]+)/i", "<a href="http://www.php.net/index.html">http://www.php.net/index.html</a>", $matches); $host = $matches[2]; // 取得域名的最后两位 preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); echo "domain name is: {$matches[0]}\n"; </code>
|