欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP学习--正则表达式

程序员文章站 2022-03-12 21:52:02
...

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函数,就返回匹配到的第一个结果。

总的来说就是返回匹配的次数。

我们看一下在本地的输出结果:

PHP学习--正则表达式

我们在来看一下preg_match_all匹配的结果。

PHP学习--正则表达式

我们可以看到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/>";


?>

PHP学习--正则表达式

定义字符集

[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_]。说白了就是输出一些特殊的字符,比如:

PHP学习--正则表达式

\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之间的字母一次或者多次。而且与空格

结合在一起。

我们查看返回的结果:

PHP学习--正则表达式

如果我们使用\w* \b,会返回abc 和 defg。

PHP学习--正则表达式

我们在理解一下,星好的作用就是匹配前面的字符0次或者任意次数。比如我们的字符串为:

$str="abc abcc defg";

所以最终的匹配结果为:

PHP学习--正则表达式

我们看到两个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/>";

PHP学习--正则表达式

限定字符

{m} 其前一个单元 严格出现最低m次。

{m,n} 其前一个单元 至少出现m次,至多出现5次。

$str="aaaaaaaaaaaaaaaaacccccc";

$preg = "/[a]{1,3}/";

匹配结果,通俗点讲应该是把字符串一个一个分割了。:

PHP学习--正则表达式

$str="a aa aaa aaaaaaaa";

$preg = "/[a]{1,3}/";

结果:

后面的红色框框,开始风格倒数第一个字符串。从m开始

PHP学习--正则表达式