PHP学习--正则表达式
preg_match()
我们先来分析一下这个函数。
$res=preg_match($preg,$str,$out);
首先这个函数的作用就是匹配str字符串中的符合preg的字符。然后存储到out变量中。我们在一般的代码开发中都是取这个函数的值。也就是res。
那么这个值到底返回什么呢?
我们在代码中实现一下:
$str="aaa@qq.com@@@@980aibeij123456789ingguangzhou";
//正则表达式
$preg = "/\w/";//匹配出所有的数字
$res=preg_match($preg,$str,$out);
echo "<br/>";
echo "$str";
echo "<br/>";
echo "<br/>";
echo "$res";
echo "<br/>";
echo "<br/>";
print_r($out);
echo "<br/>";
echo "<hr/>";
如果我们使用preg_match()函数,因为他只会进行一次匹配,也就是说只会返回0或者1。
我们看到res返回了1或者0,如果匹配到了就返回1,匹配不到就返回0。out返回的是一个数组。这个数组包含了我们正则匹配到
的结果。
但是如果我们使用all函数他会返回匹配的次数,可能是1.2.3.4.5.6…次。
如果我们使用了all函数,就返回所有的匹配结果。如果没有使用all函数,就返回匹配到的第一个结果。
总的来说就是返回匹配的次数。
我们看一下在本地的输出结果:
我们在来看一下preg_match_all匹配的结果。
我们可以看到res的结果一样,但是我们发现out的输出不一样,那是因为res返回的是符合正则表达式的字符串中的第一个数
据。而out在all模式下,会返回所有的符合正则表达式的数据。
比如:
<?php
//preg_match
//preg_match_all 匹配所有
$str = "abcdefg";
//正则表达式
$preg = "/[a-z]/";//匹配出所有的数字
$res = preg_match($preg, $str, $out);
echo "<br/>";
echo "$str";
echo "<br/>";
echo "<br/>";
echo "$res";
echo "<br/>";
echo "<br/>";
print_r($out);
echo "<br/>";
?>
定义字符集
[a-zA-Z]
[0-9]
[3-9]
中括号是单匹配。
abc是完全匹配。匹配abc。
还要注意顺序不能乱。
特殊字符集
1、
$:匹配输入字符串的结尾位置。
bbc$,匹配bbc结尾的,返回的也是bbc。
2、
^:表示字符串的开始位置
^aa返回以aa开头的,返回的也是aa
3、
():标志一个子表达式的开始和结束的位置。
4、
.:匹配除换行符\n之外的任何字符串。
他虽然匹配所有的字符。但是每次也只匹配一次字符。
5、
- :其前面的那个单元出现0次或者以上(任意次数)
6、
+:其前面的那个单元出现1次或者以上
a+
可以匹配到:a。aaa aaaaaa
7、
?:其前面那个单元出现0次或者1次
8、
\:这个字符用来转义
9、
|:指明两项之间的一个选择
组合字符
\d 匹配0-9 类似于[0-9]。
\D 匹配非数字 [^0-9] [^abc] 匹配不是括号内的任意字符。
\w 与任何单词字符匹配,包括下划线。等价于{A-Za-z0-9]。
\W 与任何非单词字符相匹配。等价于[^A-Za-z0-9_]。说白了就是输出一些特殊的字符,比如:
\s 匹配空格
\S 就是匹配非空格
\b 单词边界
与单词的边界匹配,即单词与空格之间的位置。例如:“er\b"与"never"中的"er"匹配,但是不匹配"verb"中的"er”。
\B 非单词边界
与非单词边界匹配。“ea* r” 与“nerverearly”中的"ear" 匹配。
<?php
//preg_match
//preg_match_all 匹配所有
$str="abc defg";
//正则表达式
$preg = "/[a-c]*\b/";//匹配出所有的数字
$res=preg_match($preg,$str,$out);
echo "<br/>";
echo "$str";
echo "<br/>";
echo "<br/>";
echo "$res";
echo "<br/>";
echo "<br/>";
print_r($out);
echo "<br/>";
echo "<hr/>";
$res1=preg_match_all($preg,$str,$out);
print_r($out);
echo "<br/>";
我们可以看到我们使用的正则表达式----[a-c]* \b 。表示我们匹配字符串最后的单词a到c之间的字母一次或者多次。而且与空格
结合在一起。
我们查看返回的结果:
如果我们使用\w* \b,会返回abc 和 defg。
我们在理解一下,星好的作用就是匹配前面的字符0次或者任意次数。比如我们的字符串为:
$str="abc abcc defg";
所以最终的匹配结果为:
我们看到两个c也匹配出来了。
\W \B 实践:
<?php
//preg_match
//preg_match_all 匹配所有
$str="abcdfdd abccdf defgdf";
//正则表达式
$preg = "/\w+df\B/";//匹配出所有的数字
$res=preg_match($preg,$str,$out);
echo "<br/>";
echo "$str";
echo "<br/>";
echo "<br/>";
echo "$res";
echo "<br/>";
echo "<br/>";
print_r($out);
echo "<br/>";
echo "<hr/>";
$res1=preg_match_all($preg,$str,$out);
print_r($out);
echo "<br/>";
限定字符
{m} 其前一个单元 严格出现最低m次。
{m,n} 其前一个单元 至少出现m次,至多出现5次。
$str="aaaaaaaaaaaaaaaaacccccc";
$preg = "/[a]{1,3}/";
匹配结果,通俗点讲应该是把字符串一个一个分割了。:
$str="a aa aaa aaaaaaaa";
$preg = "/[a]{1,3}/";
结果:
后面的红色框框,开始风格倒数第一个字符串。从m开始
上一篇: ★Android基础篇 初步NDK开发 .SO文件生成与JIN调用
下一篇: PHP正则表达式