- Article -

匹配LARAVEL模板语法{{}}

分类于 其他技术 标签 LARAVEL 发表于2018-10-04 15:00

在线学习正则表达式地址 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.其他

接着,我们来匹配手机号,

手机号规则,假设只有这几种可能

/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

这样则是匹配除了空格所有的东西。