菜单

正则表达式,正则表明式学习笔记

2019年11月23日 - 4166am金沙下载

本节内容我们将介绍PHP中正则
表达式的基础语法:定界符和原子。内容包含了定界符的定义以及原子的定义和构成等等。其中原子的构成十分灵活,以便满足我们对处理字符串的需求。在这之
前,我们需要先了解一个正则表达式处理函数preg_match()来进行测试,以方便我们教程示例的进行。
先来看一下正则表达式的定界符、正则表达式的构成以及preg_match()函数:
1,正则表达式的定界符。
除了字母、数字和反斜线\以外的任何字符都可以为定界符号,比如 |
|、//、{}、!!等等,但是需要注意,如果没有特殊需要,我们都使用正斜线//作为正则表达式的定界符号。
2,正则表达式的构成。 我们看一下这个公式:/原子和元字符/模式修正符
也就是说,正则表达式的原子和元字符都放在定界符之间,而模式修正符放在定界符之外。
3,preg_match()函数
我们会在后面进行详细解释,这里只是为了帮助测试,其返回一个布尔值,表示是否成功匹配。
了解完以上简单的内容,让我们进入正题。
正则表达式中的原子什么是原子?原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子。只要一个正则表达式可以单独使用的字符,就是原子。
这个概念可能看起来很模糊,没关系,下面我们来介绍一下正则表达式中原子的构成方式。
原子构成方式 1,所有打印和非打印字符
2,如果所有有意义的字符,想做为原子使用,统统使用“\”转义字符进行转义即可。如:\.
\* \+ \? \( \。 注意:” \
“转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转为有意义的字符。如:\d表示任意一个十进制的数字。
3,在正则表达式中可以直接使用一些系统提供的代表范围的原子,如下面的表格所示:
代表范围的原子说明自定义原子表示法\d表示任意一个十进制的数字[0-9]\D表示任意一个除数字这外的字符[^0-9]\s表示任意一个空白字符,空格、\n\r\t\f[\n\r\t\f
]\S表示任意一个非空白[^\n\r\t\4166m金沙,f ]\w表示任意一个字
a-zA-Z0-9_[a-zA-Z0-9_]\W表示任意一个非字,除了a-zA-Z0-9_以外的任意一个字符[^a-zA-Z0-9_]4,自定义原子表,可以匹配方括号中的任何1个原子。
在上面的表格中我们已经将系统提供的范围原子使用自定义的方式作了等价转换。由于系统不可能提供所有我需要的原子,所以自定义原子表就显得十分必要了,比如我们想要匹配字母或者数字,就需要将原子写成[a-zA-Z0-9]。
这里需要注意:
A,符号“-”表示范围,如[a-z]表示小写字母a到z,但千万不要写成[a-9]这种形式!
B,
符号“^”表示取反,一定要放在方括号的开头,比如我们想要匹配非数字,则原子为[^0-9]。
下面我们来看一下正则表达式原子的使用实例,代码如下: 复制代码 代码如下:
正则表达式{$pattern}和字符串{$string}匹配失败”; } ?>
注意:自定义原子表中的原子有一个被字符串匹配上,就匹配成功了。而去掉自定义原子表的方括号,则表示匹配整个字符串。如’/abc/’表示字符串中必须有abc这个子串才能被匹配,而’/[abc]/’表示字符串中只要包含a、b和c中的任何一个字符,即被匹配。
大家可以将上面实例中的模式进行修改(也就是正则表达式的模式变量$pattern),进而对我们本节所讲的正则表达式的原子进行验证。
本节关于正则表达式的定界符和原子就介绍完了,相信在练习的基础上,你已经会使用正则表达式的原子了。下节我们将介绍php正则表达式中的元字符,不要错过啊。

  

一、正则表达式基本语法:###\

*界定符
*原子
*元字符
*量词
*边界控制
*模式单元

<?php

1. 界定符#####\

<pre>
表示一个正则表达式的开始和结束。(如:/[0-9]/或#[0-9]#或{[0-9]})
一般使用/或#作为界定符,不建议用{}
</pre>

/* 定界符 :\\这个不能作为定界符 // || // {} !
原子:img \s 最基本的单位
1 所有打印字符和非打印字符和非打印字符
2 \. \* \+ \? \()
\<\>如果所有的有意义的字符想作为原子字符,统统使用“\”转义字符转义
3 在正则表达式中可以使用任意一个十进制的数字
\d 表示一个10进制数字
\D 表示一个除了数字
\s表示任意一个空白字符 空格 \r \n \r \t
\S 表示任意一个非空白
\w 表示任意一个字a-zA-Z0-9_
\W 表示任意一个非字
[^]表示取反 [^a-z]表示除了a-z都可以必须在方括号的第一个字符出现
只要包含了这个就可以了比如说adada1也能匹配成功
(2)自己定义原子表[]可以匹配方括号中的任何一个原子

2. 原子#####\

<pre>
(1)可见原子:Unicode编码表中用键盘输出后肉眼可见的字符
如:标点;”_?.等,英文字母数字a-z A-Z 0-9,其他可见字符等
(2)不可见原子:Unicode编码表中用键盘输出后肉眼不可见的字符
如:换行符\n,回车\r,制表符\t,空格,其他不可见符号
</pre>

元字符:* ? 不可以在正则表达式中出现
修饰原子用的
?+ . | {} () \b \B
\* \+ \ …直接匹配该元素
*:表示其元素出现了一次 多次或者0次
+:表示其元素出现了一次 多次不可能为0次
?:表示元素只能出现一次或者0次
{}:用于定义前面原子出现的次数
{5}:表示前面的原子任意出现五次必须是连续出现的
{m,n}:最少匹配 n 次且最多匹配 m 次
{m,}:表示最少出现m次,最多不限制
. :默认表示除了换行符以外的任意一个字符
^ :直接在一个正则表达式的第一个字符出现则表示必须以这个开头
$ :表示以什么结尾
| :表示或的关系 关系考虑的最后优先级最低
\b:表示一个边界
\B:表示一个非边界
( ): @1作为大原子使用
@2改变优先级
@3作为子模式进行使用*/

3. 元字符#####\

<pre>
(1)原子的筛选方式:
| 匹配两个或者多个分支选择;
[] 匹配方括号中的任意一个原子;
[^] 匹配除方括号中的原子之外的任意字符;

(2)原子的集合:
. 匹配除换行符之外的任意字符,即[^\n];
\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_];
</pre>

$pada=”/[^a-zA-Z]/”;
$string=”1 hjg”;
if(preg_match($pada, $string))
{
echo $pada.”和”.$string.” 匹配成功!”;
}else{
echo $pada.”和”.$string.” 匹配不成功!”;
}
/* 模式修正符:i u
preg_match($pattern ,$string.$arr)//字符串匹配函数

4. 量词#####\

<pre>
{n} 表示其前面的原子恰好出现n次;
{n,} 表示其前面的原子最少出现n次;
{n,m} 表示其前面的原子最少出现n次,最多出现m次;

$pada=”/[^a-z]/”;
$string=”3你好4283412389″;
if(preg_match($pada, $string))
{
echo “匹配成功!”;
}else{
echo “匹配不成功!”;
}*/
/// $Pdata=”/^\bis\b/”;
//$Pdata=”/^r3{2,}a.*s{3,5}bk\dgone$/”;
//$string=”r333333 is aefdfdsffssssssbk6gone”;
//1170370113@qq.com
/*
$Pdata=”/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/”;
$string=”1170370113@qq.com”;
if(preg_match($Pdata, $string))
{
echo “匹配成功!”;
}else{
echo “匹配不成功!”;
}*/

5. 边界控制#####\

<pre>
^ 匹配字符串开始的位置;
$ 匹配字符串结尾的位置;
</pre>

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图