在线学习正则表达式地址 http://regexr.com/
1. 匹配{{}}
如果想匹配像laravel模板里面的变量替换成php输出,像
{{ $name }}
要替换成
<?php echo $name ;?>
首先匹配{{}}大括号
/\{\{\}\}/ig
这样的话就能匹配{{}}但是很显然不是我们要的。同时{是正则里面的语法需要转义,匹配大括号之后我们要匹配空格,这个空格可能是零个或者多个,
\s*
s表示匹配空。*表示零个到多个,同样的+表示一个到多个,如果我要表示3个到多个呢?
\s{3,}
这样就表示3个到多个空格了。那3个到5个就可以
\s{3,5}
明白了吧!现在我们加上
/\{\{\s*\$name\s*\}\}/ig
现在就能匹配到{{ $name }} 这个值了,里面不管加不加空格,因为前面说了,s*表示零个到多个空格,现在,我们用这个正则来替换字符串
preg_replace('/\{\{\s*\$name\s*\}\}/ig','<?php echo $name ;?>',模板内容)
这样,模板中{{ $name }}就会被替换为
但是,如果我们的变量不是name呢????
圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理,这么说不好理解。看
preg_replace('/\{\{\s*(\$name)\s*\}\}/ig','<?php echo $1 ;?>',模板内容)
就是提取$nane这个字符串放到$1里,这里()还是比较重要的,变量是由字母或下划线组成的,不能确定有多少个字母和下划线,也不能确定他们的位置。这里要用[a-z_]+代表有多个或者一个字母或者下划线。
preg_replace('/\{\{\s*(\$[a-z_]+)\s*\}\}/ig','<?php echo $1 ;?>',模板内容)
现在就好了。后面的ig就是全局不区分大小写。
2.其他
接着,我们来匹配手机号,
手机号规则,假设只有这几种可能
- 移动手机开头:134,135,136,137,138,139,147,150
- 联通:130,131,132,155
- 电信:133,153 那么我们先开始匹配1
/1/ig 接着匹配第二个
/1[345]/ig 剩下还有9个数字[0-9]{9}
/1[345][0-9]{9}/ig 像上面w代表字母也可以用[a-z]这里[0-9]也可以用
/1[345][\d]{9}/ig 现在,我们再来看13开头的可以接4,5,6,7,8,9,0,1,2而15开头的可以接3,0,而14开头的可以接7,
/1(3[0124-9]|4[7]|5[30])[\d]{8}/ig |是或的意思。正则都是从左到右的。
前置匹配和后置匹配,js不支持前置匹配,在后面或者前面添加
(?!,) 后面不紧接, (?=,) 后面紧接, 最后我们要匹配一段文字从@到kk的。
/@[\s\S]+kk/ig 加上问号 表示最短匹配,以下:
/@[\s\S]+?kk/ig
正则中的^表示开头,$表示结束。
/^\w+/ig
这样就是匹配所有单词的第一个单词。 值得注意的是^也是反向的意思比如
/[^\s]+/ig
这样则是匹配除了空格所有的东西。