正则 &preg_match
程序员文章站
2022-06-06 17:26:49
...
<?php
/*preg_match
可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,
以此类推 */
$mode='/(^[\w\.\_]{2,6})@(\w{4,}).([a-z]{2,10})/';
$email='matg@gmail.com';
$matches = array();
if (preg_match($mode, $email,$matches)){
echo '匹配字符串';
var_dump($matches);
//array(4) { [0]=> string(14) "matg@gmail.com" [1]=> string(4) "matg" [2]=> string(5) "gmail" [3]=> string(3) "com" }
}else{
echo '错误,请重新输入';
var_dump($matches);
}
/*
说明,[\w\.\_] 相当于[0-9a-zA-Z\.\_] ,就是比\w多匹配 '.' 和 '_'两种字符
不等与 [\w._] 因为 . 匹配除换行任何字符 而不是“ .”
(^[\w\.\_]{2,6}) 就是 数字 或字母 或'.''_' 出现 两次 到六次 例如 .. 是匹配的
*/
/*
定界符,通常使用 "/"做为定界符开始和结束,也可以使用"#"。
什么时候使用"#"呢?一般是在你的字符串中有很多"/"字符的时候,因为正则的时候这种字符需要转义
*/
$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i';
//$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i'; //$是以.html结尾
//后一个"i"就是修饰符,表示忽略大小写,还有一个"x"表示忽略空格。
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches);
}
echo "<br>";
//通配符(lookarounds):断言某些字符串中某些字符的存在与否!
/*
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
*/
$regex = '/(?<=c)d(?=e)/'; /* d 前面紧跟c, d 后面紧跟e*/
$str = 'abcdefgk';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches); //输出 d
}
echo "\n";
//否定意义:
$regex = '/(?<!c)d(?!e)/'; /* d 前面不紧跟c, d 后面不紧跟e*/
$str = 'abcdefgk';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches); // 没有输出
}
echo "<br>";
$regex = '/(25[0-5])/'; /* d 前面不紧跟c, d 后面不紧跟e*/
$str = '182';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches); //
}
echo "\n";
?>
<?php
/*
限定符:
如[\w]{3,5}或者[\w]*或者[\w]+这些[\w]后面的符号都表示限定符。现介绍具体意义。
{3,5}表示3到5个字符。{3,}超过3个字符,{,5}最多5个,{3}三个字符。
特殊殊字符 解释
* 0到多次
+ 1到多次还可以写成{1,}
? 0或1次
. 匹配除换行符外的所有单个的字符
\w [a-zA-Z0-9_]
\s 空白字符(空格,换行符,回车符)[\t\n\r]
\d [0-9]
字符域: [\w]用方括号扩起来的部分就是字符域。
脱字符号 ^:
^放在字符域(如:[^\w])中表示否定(不包括的意思)——“反向选择”
^ 放在表达式之前,表示以当前这个字符开始。(/^n/i,表示以n开头)。
*/
?>
/*preg_match
可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,
以此类推 */
$mode='/(^[\w\.\_]{2,6})@(\w{4,}).([a-z]{2,10})/';
$email='matg@gmail.com';
$matches = array();
if (preg_match($mode, $email,$matches)){
echo '匹配字符串';
var_dump($matches);
//array(4) { [0]=> string(14) "matg@gmail.com" [1]=> string(4) "matg" [2]=> string(5) "gmail" [3]=> string(3) "com" }
}else{
echo '错误,请重新输入';
var_dump($matches);
}
/*
说明,[\w\.\_] 相当于[0-9a-zA-Z\.\_] ,就是比\w多匹配 '.' 和 '_'两种字符
不等与 [\w._] 因为 . 匹配除换行任何字符 而不是“ .”
(^[\w\.\_]{2,6}) 就是 数字 或字母 或'.''_' 出现 两次 到六次 例如 .. 是匹配的
*/
/*
定界符,通常使用 "/"做为定界符开始和结束,也可以使用"#"。
什么时候使用"#"呢?一般是在你的字符串中有很多"/"字符的时候,因为正则的时候这种字符需要转义
*/
$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i';
//$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i'; //$是以.html结尾
//后一个"i"就是修饰符,表示忽略大小写,还有一个"x"表示忽略空格。
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches);
}
echo "<br>";
//通配符(lookarounds):断言某些字符串中某些字符的存在与否!
/*
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
*/
$regex = '/(?<=c)d(?=e)/'; /* d 前面紧跟c, d 后面紧跟e*/
$str = 'abcdefgk';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches); //输出 d
}
echo "\n";
//否定意义:
$regex = '/(?<!c)d(?!e)/'; /* d 前面不紧跟c, d 后面不紧跟e*/
$str = 'abcdefgk';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches); // 没有输出
}
echo "<br>";
$regex = '/(25[0-5])/'; /* d 前面不紧跟c, d 后面不紧跟e*/
$str = '182';
$matches = array();
if(preg_match($regex, $str, $matches)){
var_dump($matches); //
}
echo "\n";
?>
<?php
/*
限定符:
如[\w]{3,5}或者[\w]*或者[\w]+这些[\w]后面的符号都表示限定符。现介绍具体意义。
{3,5}表示3到5个字符。{3,}超过3个字符,{,5}最多5个,{3}三个字符。
特殊殊字符 解释
* 0到多次
+ 1到多次还可以写成{1,}
? 0或1次
. 匹配除换行符外的所有单个的字符
\w [a-zA-Z0-9_]
\s 空白字符(空格,换行符,回车符)[\t\n\r]
\d [0-9]
字符域: [\w]用方括号扩起来的部分就是字符域。
脱字符号 ^:
^放在字符域(如:[^\w])中表示否定(不包括的意思)——“反向选择”
^ 放在表达式之前,表示以当前这个字符开始。(/^n/i,表示以n开头)。
*/
?>
$ip_ereg = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
解读: 以25X (25)不是【25】 中括号是代表任何其中之一 && X为(012345)任何一个 即 251, 252,253,254,255,
或 2 xy X为任何01234任何一个,Y 是也是0123456789任何一个 例如 213
或 0或1 匹配 0次或1次 [0-9][0-9]? 匹配的是 12, 19 整个下来就是 匹配 119,109 或010,或39,或9 这样的
以上的三个 任何一个 {3}匹配三次 就成了 251.213.9.
外加25X X 为012345, 例如251 或2XY 或 或 0或1 匹配 0次或1次。。。。 $结尾
就是说 以 252类似结尾的
251.213.39.252
上一篇: 历史上美丽端庄的溧阳公主,一生有多坎坷?
下一篇: PHP反射机制