正则表达式的基础用法
2017-09-22

在php中会经常使用到正则,经常会因为正则的反斜杠整懵逼。前一段时间,正好项目中用到正则,虽然研究的不深,但日常简单的正则表达式也足够用了。就拿工作中一个案例来讲吧。需要匹配两个#之间的内容。不同的工程师有不同的写法。

第一种写法


/#(.*?)#/
如上,中间匹配的内容,就是你想要的匹配的内容,.*? 表示任意字符,括号在正则中表示匹配其中的原子整体为一个原子。/表示php的界定符,不同的语言和解释器,那个界定符会有所区别。php中的界定符有三种{} ## // 一般用// ,因为大括号有时作为运算符,容易混淆


第二种写法


/#([\s\S]*?)#/
如上,\s是空白字符,\S是非空白字符,*?出现任意次。


第三种写法


/#([^#]+)#/
如上,^这种符号如果在中括号里面,表示匹配除了方括号以外的字符,+表示匹配至少一次,也就是匹配1次到无穷大次,*表示匹配任意次,也就是从0次到无穷大次,?表示匹配0次或1次,[]中括号表示匹配方括号的任意字符。


以上三种方法,都可以匹配两个#号之间的字符。但是需求方要求,匹配的字符不能包括空值,并且中间字符不能#号。现在可以把以上正则,做一下处理,如下:


'/#((?!\s*#)[^#]+)#/si'

?!\s 除了空格,[^#]除了#号,组成的正则匹配,s和i都是修正模式,i忽略英文大小写,s匹配换行符的所有字符。

先简单的介绍这么多,前段时间分享的ppt链接附上,期待大家一同进步。https://www.yezismile.com/index/reg/#1


分享: