注意:
- 匹配了的项不会再匹配了
- 空格也参与匹配
- 如果加了^和$则是匹配字符串从而得出true or false(对给定的字符串只匹配一次)
-
什么是正则表达式
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索(search方法)和文本替换(replace方法)的操作。
语法
/ 正则表达式主体 / 修饰符(可选)
修饰符:
i 不区分(ignore)大小写
例如: /abc/i 可以匹配 abc、aBC、Abc
g 全局(global)匹配
如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回
如果带g,则字符串从左到右,找到每个符合条件的都记录下来,直到字符串结尾位置
例如:
var str = 'aaaaaaaa'
var reg1 = /a/; str.match(reg1) // 结果为:["a", index: 0, input: "aaaaaaaa"]
var reg2 = /a/g; str.match(reg2) // 结果为:["a", "a", "a", "a", "a", "a", "a", "a"]
m 多(more)行匹配
若存在换行\n并且有开始^或结束 (美元符) 符的情况下,和 g一起使用实现全局匹配,
因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行,
g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始
var str = "abcggab\nabcoab";
var preg1 = /^abc/gm; str.match(preg1) // 结果为:["abc", "abc"]
var preg2 = /ab$/gm; str.match(preg2) // 结果为:["ab", "ab"]
s 特殊字符圆点 . 中包含换行符
默认的圆点 . 是 匹配除换行符 \n 之外的任何单字符,加上s之后, . 中包含换行符
$ str = "abggab\nacbs";
$ preg = "/b./s";
preg_match_all($preg, $str,$matchs);
print_r($matchs);//Array ( [0] => Array ( [0] => bg [1] => b [2] => bs ) )
U 只匹配最近的一个字符串;不重复匹配;
$mode="/a(.*?)c/";
$preg="/a.*c/U";//这两个正则返回相同的值
$str="abcabbbcabbbbbc" ;
preg_match($mode,$str,$content); echo $content[0];//abc
preg_match($preg,$str,$content); echo $content[0];//abc
//修正符:x 将模式中的空白忽略;
//修正符:A 强制从目标字符串开头匹配;
//修正符:D 如果使用$限制结尾字符,则不允许结尾有换行;
//修正符:e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;
注意:上面主要使用search()方法和replace()方法,也能用test()方法
search() 方法
用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
var str = "Visit Runoob!";
var n = str.search("Runoob");
replace() 方法
用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
str='Visit Microsoft'
str.replace(/microsoft/i,'Runoob') //使用Runoob 代替 str 中的Microsoft字符串</pre>
注意:下面的写法 被称为 正则表达式模式
使用方法有两个:
-
test()
-
exec()
-
正则表达式的元字符
注意: ^ 在 [ ] 中是取反的意思,在外面是匹配字符串的开始的意思
-
反义(将小写变成大写即可)
3.转义
问题: 如何匹配特殊字符呢 ? 如 ‘ . ’ ,' ? '等
答:使用转义符 【 \ 】,如 \ . , \ ?
-
正则表达式的注释
5.正则表达式的重复
例如:
6.分支条件
例子
7.分组:()
作用:将子表达式做成子集,方便对匹配的字符进行划分
符号 :()
例子:
8.贪婪和懒惰
-
贪婪 : .*
作用: 比如 <a.*> ,如果一个页面中有多个< a>标签,则会将第一个< a > 一直到最后一个< a> 看成是一个结果找出
理解:
' . ' 代表 匹配除了 换行符 以外的所有字符
‘ * ’ 代表 出现次数为 零次到无限次
‘ .* ' 表示 除了换行符的字符 出现零次到无限次
-
懒惰 :.*?
作用:比如 < a .*>,如果一个页面中有多个 < a > 标签,则会将每一个 < a>标签看成一个结果,如果有n个 ,则会有n个结果
理解:
’ ?' 代表 出现零次或者一次(尽量匹配少的内容,最简短的那个)
例子: