正则表达式的构成
/原子 元字符/模式修正符
1.定界符 //
2.原子
打印字符
和非打印字符
(\r \f)
3.元字符
用来修饰原子
4.模式修正符
放在定界符外边
的字符,一个字符就是一个功能,可以组合使用
1.原子
1.打印字符 键盘上的字符都是打印字符
2.非打印字符
原子字符 | 含义描述 |
---|---|
\cx | 匹配由x指明的控制字符。如\cM匹配一个Control-M或回车符.x的值必须为A~Z或a~z |
\f | 匹配一个换页符 等价于 \x0c或\cL |
\n | 匹配一个换行符 等价于 \x0a或\cJ |
\r | 匹配一个回车符 等价于 \x0d或\cM |
\t | 匹配一个制表符 等价于 \x09或\cI |
\v | 匹配一个垂直制表符 等价于 \x0b或\cK |
3.通匹配符
字符 | 含义 |
---|---|
\d | 代表任意一个数字[0-9] |
\D | 代表任意一个非数字[^ 0-9] |
\w | 代表任意一个字[0-9a-zA-Z] |
\W | 代表任意一个非数字[^ 0-9a-zA-Z] |
\s | 代表空白[\t\n\f\v] |
\S | 代表非空白[^ \t\n\f\v] |
. | 任意原子 |
4.自定义原子表
[13579] 这个范围内的
[^13579a-z] 除了这个范围内的
2.元字符
字符 | 含义 |
---|---|
* | 匹配其前原子0次或多次 |
+ | 匹配至少原子1次或多次 |
? | 匹配原子0或1次 |
| | 它两边的原子只要出现一个就可以 但优先级是最低的 |
{n} | 匹配n次 |
{n,} | 匹配至少n次 |
{n,m} | 匹配至少n次至多m次 |
^或\A | 匹配输入字符的开始位置 多行模式下行的开头,即紧随一个换行符之后 必须写正则最前面 |
$或\Z | 匹配输入字符的开始位置 多行模式下行的结尾,即紧随一个换行符之前 必须写正则最后面 |
\b | 代表单词边界 |
\B | 不是单词边界 |
() | 匹配其整体为一个原子,即模式单元,可以理解为大原子 |
$str = "abcfdsafdsafdsaabc";
//正则表达式
$reg = "/^abc.*abc$/";
$str = "this is island";
//正则匹配this 里的is
$reg = "/\Bis\b/";
()的作用
1.优先级改变
$str = "this oracmysql is island";
//正则匹配
$reg = "/orac(le|my)sql/";
2.小原子变大原子
$reg = "/(mysql)*/";
3子模式
整个表达式是个大模式,小括号是每个独立的子模式
$str = "this http://www.ngyhd.com oraclemysqlmysqlmysql";
//正则匹配网址
$reg = "/(http|ftp|https|telnet)\:\/\/(www|mail|ftp)\.(.*)?\.(net|com|org)/";
4.反向引用
$str = "this http://www.ngyhd.com 2014-01/24 oraclemysqlmysqlmysql";
//正则匹配日期
$reg = "//(?:\d{4})(-|\/)\d{2}\1\d{2}//"
?:不作为子模式
\1为第一个子模式
模式修正符
字符 | 含义 |
---|---|
i | 修正不区分大小写(默认区分大小写) |
m | 修政府修正正则表达式可以视为多行,在使用^或$两个元字符时,每一行满足都可以 |
s | .可以匹配换行符(默认.不能匹配回车符号) |
x | 可以省略空白 |
U | 取消贪婪模式 相当于(.*?) 比如说要从字符串中 <td>面包</td><td>面包</td>,本来你只可以匹配面包一,可是你贪心,于是就把第一个<到最后一个<td>里面的两个面包取出来了 |