最近在网上,看到一个有趣的正则表达式如下
/^( |\s)*|( |\s)*$/
这个正则表达式的用途是匹配字符串头或尾含有空格的字符串。
下面是实现去掉字符串头尾空格的PHP代码
$str = " dfadad abcasdasdas ";
$str = preg_replace('/^( |\s)|( |\s)$/', '', $str);
var_dump($str);
//输出结果如下: //string 'dfadad abcasdasdas' (length=23)
因为
是空格转义,不是字符串,直接用trim()是去不掉。刚开始看这段代码的时候没有看懂,现在理解了,下面来分析一下这个表达式是如何实现其功能的。
我将整个正则表达式分为三部分
( |\s)*
|
( |\s)*
1和3的括号里面的表达式都是匹配空格的正则,'*'代表0个或多个。1表示以空格开头,3表示已空格结尾。表达式中的2是一个与运算符,那么这个正则表达式的情况就有如下四种:
A: 0 0
首尾都没有空格
B: 0 1
以空格结尾的字符串
C: 1 0
以空格开头的字符串
D: 1 1
开头和结尾都有空格的字符串
也可以直接从与逻辑的定义去理解,只要有一个为真那么值就为真。
在这里分享下自己的理解。如有错误之处或更多建议,请指出,谢谢。