正则表达式入门

こ雲淡風輕ζ 提交于 2019-12-30 09:10:04
JavaScript 中使用 
正则对象使用
1. 声明正则表达式对象=匹配模式
2. 调用方法传参
正则对象的两个方法
1 regular.exec(str)
2 regular.test(str)
3 var str='ssfdsf';
4 var reg=/66/;
5 reg.test(str);

 

String 字符串方式使用
1 search(reg); RETURN 匹配起始位置,如未找到,返回-1
2 match(reg); RETURN 匹配的数组
3 replace(reg,'替换后的字符串'); RETURN 替换后的新字符串
4 split(reg); RETURN 以指定模式的字符分割字符串,返回数组
 
子表达式
通过一对圆括号括起来的内容,就称为子表达式
 
捕获
运行过程中,子表达式所匹配到的内容会被系统放入缓冲区中
 
反向引用
通过\n (0<n) 来引入缓冲区中的内容
 
例如:
  查找 1221,1881 var reg=/(\d)(\d)\2\1/
  查找 2233,7788 var reg=/(\d)\1(\d)\2/
1 案例:
2 1. 获取所有HTML代码
3 var reg=/<(.*)>.*<\/\1>/gi
4 2. 替换手机号
5 var reg=/\d{3}\d{4}\d{4}/gi;
6 var str=13333333333; str = str.replace(reg,'$1****$3');
 
正则表达式的构成
普通字符
a-z,A-Z,0-9,_ 等
 
元字符
$ ^ * ( ) [] {} + ? \ | / .
 
字符簇
用一对方括号括起来的内容 [1,2,3] 表示匹配方括号中任意字符
 
反义字符簇 ^
只在[]里面使用代表反义 在括号外使用的时候不是取反的意思
例如: [^a-z] 匹配除a-z以外的任意字符
 
注意: /[^abc]/ 和 /^abc/ 的区别
var reg=/^abc/gi; 匹配以 abc 开通的字符串
 
预定义字符类
. 匹配除了\n\r之外的任意字符 [^\n\r]
\w 匹配任意ASCII单字符, 等价于[a-zA-Z0-9_]
\W 和\w 相反
\d 匹配任何ASCII数字,等价于[0-9]
\D 和\d相反
\s 匹配任何Unicode空白符,包括 空格,制表符,换行,回车等
\S 和\s相反
\b 匹配一个单词的边界
\B 和\b相反
 
数量词
由于字符类只能匹配单个字符,需要结合数量词完成字符串匹配
{n,m} 匹配前一项至少n次,但是不能超过m次
{n,} 匹配前一项至少n次,或者更多次
{n} 匹配前一项确定的n次
? 匹配前一项0次或1次 //可以用来解除贪婪模式
+ 匹配迁移性1次或多次
* 匹配前一项任意次
 
贪婪匹配
在正则表达式中,我们把匹配多的就不匹配少的称为'贪婪匹配',默认就是贪婪匹配
可以通过 ? 转化为非贪婪匹配, ? 必须放在重复类字符后面
 
模式修正符
i 执行大小写不敏感的匹配
g 执行全局匹配, 默认是找到第一个之后就停止了
m 执行多行匹配,此时可以用 ^ 和 $ 匹配每一户开头或结尾
s 代表单行模式,把整个字符串当做一行来看待. js 目前不支持单行模式
 
1 案例:
2 1. 过滤js字符串
3 var str = '<script>ok</script>' -> ok
4 var reg=/<script>(.*)<\/script>/gi
5 str.replace(reg,'$1');
6 2. 把页面中所有<a></a>中的类容连接替换成#
7 var str='<a href="http://www.google.com">谷歌</a>';
8 var reg=/<a[^>]*>(.*?)<\/a>/gi;
9 str = str.replace(reg, str);

 

边界
^ 匹配字符串开头,多行检测中会匹配每一行的开头
$ 匹配字符串的结尾,在多行检测中,会匹配每一行结尾
\b 匹配一个单词的边界
\B 与\b相反,匹配非词语边界的字符
 
转义符
\ 对特殊字符转义 $ ^ * () {} [] . / + ?
选择匹配符
| 可以匹配多个规则
 

正则表达式在PHP中的使用
preg_match() preg_match_all() preg_replace()
 
preg_match($reg, $str, $array) 匹配一次,返回0/1, 匹配的结果放进$array中
preg_match_all($reg, $str, $array); 匹配多次, 返回0/N.
 
php里取消贪婪模式
在正则外面加上 U 模式符 加了U 就不要在式子里面添加 ? 了
 
preg_replace 的两种用法
用法一: 前两个参数都是字符串
preg_replace($reg, $content, $str);
按照 $reg 规则匹配 $str 里面的内容,然后用 $content 替换内容
 
用法二: 前两个参数都是数组
preg_replace(array($reg1,$reg2), array($content1,$content2), $str);
先按照 $reg1 匹配内容替换为 $content1,
再按照 $reg2 匹配内容替换为 $content2.
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!