php 正则表达式的基本语法及匹配

一、定义:

       正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
       列目录时,dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里与正则式的的含义是不同的。
  正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
  举个例子,
  一个字符串 $subject = ‘nihao123模仿5yu9ouew45’;
  现有一正则表达式 $pattern = ‘[0-9]’;(意为取出该字符串中0-9的数字)
  则得到的结果为 1235945;
  

二、.php正则表达式的匹配

1.preg_match ( string $pattern , string $subject [, array &$matches] )
执行一个正则表达式匹配,成功返回 1 ,否则返回 0

pattern:要搜索的模式,字符串类型,正则表达式
subject:输入字符串。
matches:可选,存储匹配结果的数组。
例子:

$subject = 'nihao123模仿5yu9ouew45'; 
$pattern = '[0-9]';
preg_match($pattern,$subject,$matches);
var_dump($matches);

2.preg_match_all (pattern, subject, matches);
用于执行一个全局正则表达式匹配,将实现全部结果的匹配,如果要匹配成功一次后停止匹配,请使用 preg_match() 函数。

注意: 3 , 4 的subject可以为字符串也可以为数组

3.preg_replace (pattern ,replacement ,subject[, limit[, count ]] );
执行一个正则表达式的搜索和替换

replacement:用于替换的字符串或字符串数组
subject:要进行搜索和替换的字符串或字符串数组。
limit:可选。每个模式在每个subject上进行替换的最大次数。默认是 -1(无限).
count:可选。完成的替换次数.

4.preg_filter ( pattern, replacement, subject);
和str_replace()作用相似,替换字符, 等价于preg_replace() 除了它仅仅返回(可能经过转化)与目标匹配的结果.

5.preg_grep ( pattern, input[, flags] );
用于获取与表达式相匹配的元素组成的数组

input:待匹配数组
flags:可选。该参数如果设置为PREG_GREP_INVERT,则这个函数返回输入数组中与给定模式pattern不匹配的元素组成的数组。

6.preg_split ( pattern, subject, limit, flags)
函数通过一个正则表达式分割字符串,返回一个数组

limit:限制分割得到的子串最多只有limit个

7.preg_quote ( str [, delimiter ] );
preg_quote()函数把正则表达式字符串中的字符增加一个反斜线。 通常用于你需要将一个字符串作为正则表达式进行匹配的时候。转义正则表达式字符
str:正则表达式
delimiter:可选参数。通常用于转义分隔符:/

三、正则表达式的基本语法

语法:界定符,原子,量词,边界控制,模式单元

1.界定符:表示一个正则表达式的开始和结束。’/’或’#’或’{}’

2.原子:原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子。只要一个正则表达式可以单独使用的字符,就是原子。
       原子构成方式:
(1)所有打印(所有可以在屏幕上输出的字符串)和非打印字符(看不到的,比如空格,换行符等等) 。
(2)如果所有有意义的字符,想做为原子使用,统统使用“\”转义字符进行转义即可。如:. * + \? ( \<>。 注意:” \ “转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转为有意义的字符。如:\d表示任意一个十进制的数字。
(3)在正则表达式中可以直接使用一些系统提供的代表范围的原子:
. :匹配除换行符意外的所有字符
\d: 匹配任意一个十进制数字,即 [0-9];
\D:匹配任意一个非十进制数字,即 [^0-9];
\s:匹配一个不可见原子,即 [\f\n\r\t\v];
\S:匹配一个可见原子,即 [^\f\n\r\t\v];
\w:匹配任意一个数字,字母,下划线,即 [0-9a-zA-Z_];
\W:匹配任意一个非字母、数字、下划线,即 [^0-9a-zA-Z_];

3.量词:
{n}:限制搜索时需要的的字符为n个
{n,}:限制为n个以及以上
{n,m}:限制在n到m之间
*: 即为{0,},可能出现,也可能不出现,出现次数没有上限
+: {1,},至少出现1次,出现次数没有上限
?:{0,1},至多出现1次,也可能不出现

4.边界控制
^ : 限制第一个字符只能为某个值
$:限制最后一个字符后面没有其它值

5.修正模式:懒惰模式和贪婪模式
U:懒惰匹配
i:忽略英文字母大小写
x:忽略空白
s:让元字符 ’ . ‘匹配包括换行符以内的所有字符

四、常见正则表达式匹配

1.非空: .+
2.保留两位小数的浮点数: \d+.\d{2}$
3.手机号匹配: 1(3|4|5|7|8)\d{9}$
4.email地址匹配: ^\w+(.\w+)*@\w+(.\w+)+$
5.url地址匹配:^(https?:\/\/)?(\w+.)+[a-zA-Z]+$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值