PHP正则表达式

一、正则表达式是什么

  • 正则表达式的设计思想就是使用一些描述性的符号和文字,为字符串定义一个规则。凡是符合这个规则的,程序就认为文本是匹配的,否则就是不匹配。正则表达式的匹配过程,通俗地讲,就是逐字匹配表达式的描述规则,如果每个字符都匹配,那么程序就认为匹配成功,只要有一个匹配不成功,那么匹配就失败。

二、正则表达式语法

普通字符

  • 想判断某个长度为1的字符串是不是数字可以使用[0123456789],如果符合规则的字符范围是连续的还可以省去中间字符用“-”代替:[0-9]
  • 如何判断一个长度为2的字符串是不是数字呢?
    只需要写两次就行了:[0-9][0-9]
  • 同理怎么判断一个长度为1的字符串是不是英文字母的写法是:[a-zA-Z]或者[A-Za-z]
  • 当允许的字符范围只要一个时,可以省略“[]”。例如判断用户输入的是“Yes”或者“yes”,正则表达式:[Yy]es

方括号"[ ]"表示一个字符组,代表一位字符。里面的数字表示我们匹配的字符串与其中任何一个字符相同,那么我们就认为匹配成功。

字符转义

  • 如果想匹配“-” “[”还有 “]”这几个字符本身则需要在字符前加“\”
    例如想匹配“0” “-” 和“9”的话,正则表达式:[0-9]

元字符

  • 元字符是在正则表达式中有特殊意义的字符

\ :
将下一个字符标记为一个特殊字符,或一个原义字符,或一个向后引用,或一个八进制转义符。例如:’\n’ 匹配一个换行符。序列 " \\ " 匹配 "\ " 而 " \( " 则匹配 “(”。

^ :
匹配输入字符串的开始位置。例如“^\w+”只能匹配到abc123里的abc而不能匹配到123abc里的abc。在方括号中使用表示不接受该字符集合

$ :
匹配输入字符串的结束位置。例如“\w+$”只能匹配到123abc里的abc而不能匹配到abc123里的abc。

" * " :
匹配前面的字符零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。

" + ":
匹配前面的字符一次或多次。例如,zo+ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

? :
匹配前面的字符零次或一次。例如,do(es)? 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。

“ . ”:
匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像"(.|\n)"的模式。

x|y :
匹配 x 或 y。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。

{n} :
n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。

{n,} :
n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。

{n,m} :
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

\w :
匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

\W :
匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。

\b :
与一个字边界匹配。即字与空格间的位置。er\b 与 “never”中的“er”匹配,但与“verb”中的“er”不匹配。

\B :
非边界字匹配 er\B 与“verb”中的“er”匹配。但与“never”中的“er”不匹配。

限定符

  • 限定符用来指定输入中必须存在、组或字符类的多少实例才能找到匹配项。+、*、?、{n}、{n,}、{n,m}都是限定符

定位符

  • 定位符能把正则表达式固定到行首或行尾,还能创建一些在一个单词里,一个单词的开头或者一个单词的结尾出现的正则表达式。"^“和”$“分别指定字符串的开头和结尾,”\b"描述单词的前或后边界,"\B"表示非单词边界。

分组构造

  • 分组构造描述了正则表达式的子表达式,用于捕获输入字符串的子字符串。
  • (子表达式)- 其中“子表达式”为任何有效正则表达式。

例如字符串“He said that that was the correct answer. ”我们使用“(\w+)\s(\w+)\W”来匹配:
He said一组,"He"和“said”各分别为一个子组。
that that一组,"that"和“that”各分别为一个子组。
was the一组,"was"和“the”各分别为一个子组。
correct answer一组,"correct"和“answer.”各分别为一个子组。

三、PCRE库

preg_grep()函数

array preg_grep(string $pattern,array $input)
  • 给定一个正则表达式pattern和一个数组input,返回数组input中与pattern匹配的元素组成的数组。pattern:字符串类型,正则模式,input:输入数组。

请添加图片描述

preg_match()函数

int preg_match(string $pattern,string $subject,array &$matches)
  • 搜索 subject 与 pattern 给定的正则表达式的一个匹配。$pattern: 要搜索的模式,字符串形式。subject: 输入字符串。matches: 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

请添加图片描述

preg_match_all()函数

int preg_match_all(string $pattern,string $subject,array &$matches)
  • 与preg_match()功能类似,前者匹配一个字符串后者进行全局匹配,获取所有符合要求的匹配

请添加图片描述

preg_replace()函数

mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject)
  • $pattern: 要搜索的模式,可以是字符串或一个字符串数组。
    $replacement: 用于替换的字符串或字符串数组。
    $subject: 要搜索替换的目标字符串或字符串数组。

请添加图片描述

preg_replace_callback()函数

mixed preg_replace_callback(mixed $pattern,callable $callback,mixed $subject)
  • 与preg_replace功能类似,区别是preg_replace()接受replacement字符串作为替换,而preg_replace_callback()函数接受callback()函数作为替换。

请添加图片描述

四、常用正则表达式

1.E-mail

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

2.URL

^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w.-])\/?$

3.IP地址

^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|[0-9]{2}|2[0-4][0-9]|25[0-5])$

4.匹配首尾空白符

^\s|\s$

5.手机号

^(13[0-9]|14[0-9]|15[0-9]|166|17[0-9]|18[0-9]|19[8|9])\d{8}$

6.电话号

^(\d{3,4}-)?\d{7,8}$

7.身份证

^((\d{18})|([0-9x]{18})|([0-9X]{18}))$

8.账号是否合法

^[a=zA-Z][a-zA-Z0-9_]{4,15}$

9.一年12个月

^(0?[1-9]|1[0-2])$

10.一个月31天

^((0?[1-9])|((1|2)[0-9])|3[01])$

11.日期格式

/^\d{4}-((0?[1-9])|(1[0-2]))-((0?[1-9])|([12][0-9])|(3[01]))$/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值