PHP学习--正则表达式

preg_match()

我们先来分析一下这个函数。

$res=preg_match($preg,$str,$out);

首先这个函数的作用就是匹配str字符串中的符合preg的字符。然后存储到out变量中。我们在一般的代码开发中都是取这个函数的值。也就是res。

那么这个值到底返回什么呢?

我们在代码中实现一下:

$str="shangh@@@@@980aibeij123456789ingguangzhou";

//正则表达式

$preg = "/\w/";//匹配出所有的数字

$res=preg_match($preg,$str,$out);


echo "
"
; echo "$str"; echo "
"
; echo "
"
; echo "$res"; echo "
"
; echo "
"
; print_r($out); echo "
"
; echo "
"
;

如果我们使用preg_match()函数,因为他只会进行一次匹配,也就是说只会返回0或者1。

我们看到res返回了1或者0,如果匹配到了就返回1,匹配不到就返回0。out返回的是一个数组。这个数组包含了我们正则匹配到

的结果。

但是如果我们使用all函数他会返回匹配的次数,可能是1.2.3.4.5.6…次。

如果我们使用了all函数,就返回所有的匹配结果。如果没有使用all函数,就返回匹配到的第一个结果。

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

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

在这里插入图片描述

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

PHP学习--正则表达式_第1张图片

我们可以看到res的结果一样,但是我们发现out的输出不一样,那是因为res返回的是符合正则表达式的字符串中的第一个数

据。而out在all模式下,会返回所有的符合正则表达式的数据。

比如:




//preg_match
//preg_match_all   匹配所有
$str = "abcdefg";

//正则表达式

$preg = "/[a-z]/";//匹配出所有的数字

$res = preg_match($preg, $str, $out);

echo "
"
; echo "$str"; echo "
"
; echo "
"
; echo "$res"; echo "
"
; echo "
"
; print_r($out); echo "
"
; ?>

PHP学习--正则表达式_第2张图片

定义字符集

[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学习--正则表达式_第3张图片

\s 匹配空格

\S 就是匹配非空格

\b 单词边界
与单词的边界匹配,即单词与空格之间的位置。例如:“er\b"与"never"中的"er"匹配,但是不匹配"verb"中的"er”。

\B 非单词边界

与非单词边界匹配。“ea* r” 与“nerverearly”中的"ear" 匹配。


    //preg_match
    //preg_match_all   匹配所有
$str="abc defg";

//正则表达式

$preg = "/[a-c]*\b/";//匹配出所有的数字

$res=preg_match($preg,$str,$out);


echo "
"
; echo "$str"; echo "
"
; echo "
"
; echo "$res"; echo "
"
; echo "
"
; print_r($out); echo "
"
; echo "
"
; $res1=preg_match_all($preg,$str,$out); print_r($out); echo "
"
;

我们可以看到我们使用的正则表达式----[a-c]* \b 。表示我们匹配字符串最后的单词a到c之间的字母一次或者多次。而且与空格

结合在一起。

我们查看返回的结果:

PHP学习--正则表达式_第4张图片

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

PHP学习--正则表达式_第5张图片

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

$str="abc abcc defg";

所以最终的匹配结果为:

PHP学习--正则表达式_第6张图片

我们看到两个c也匹配出来了。

\W \B 实践:


    //preg_match
    //preg_match_all   匹配所有
$str="abcdfdd abccdf defgdf";

//正则表达式

$preg = "/\w+df\B/";//匹配出所有的数字

$res=preg_match($preg,$str,$out);


echo "
"
; echo "$str"; echo "
"
; echo "
"
; echo "$res"; echo "
"
; echo "
"
; print_r($out); echo "
"
; echo "
"
; $res1=preg_match_all($preg,$str,$out); print_r($out); echo "
"
;

PHP学习--正则表达式_第7张图片

限定字符

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

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

$str="aaaaaaaaaaaaaaaaacccccc";

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

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

PHP学习--正则表达式_第8张图片

$str="a aa aaa aaaaaaaa";

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

结果:

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

PHP学习--正则表达式_第9张图片

你可能感兴趣的:(PHP学习,正则表达式)