最近在网上,看到一个有趣的正则表达式如下

/^( |\s)*|( |\s)*$/

这个正则表达式的用途是匹配字符串头或尾含有空格的字符串。

下面是实现去掉字符串头尾空格的PHP代码

$str = " dfadad abcasdasdas   ";  
$str = preg_replace('/^( |\s)*|( |\s)*$/', '', $str);  
var_dump($str);

//输出结果如下:
//string 'dfadad abcasdasdas' (length=23)

因为 是空格转义,不是字符串,直接用trim()是去不掉。刚开始看这段代码的时候没有看懂,现在理解了,下面来分析一下这个表达式是如何实现其功能的。

我将整个正则表达式分为三部分

  • 1 ( |\s)*
  • 2 |
  • 3 ( |\s)*

1和3的括号里面的表达式都是匹配空格的正则,’*‘代表0个或多个。1表示以空格开头,3表示已空格结尾。表达式中的2是一个与运算符,那么这个正则表达式的情况就有如下四种:

A: 0 0

首尾都没有空格

B: 0 1

以空格结尾的字符串

C: 1 0

以空格开头的字符串

D: 1 1

开头和结尾都有空格的字符串

也可以直接从与逻辑的定义去理解,只要有一个为真那么值就为真。

在这里分享下自己的理解。如有错误之处或更多建议,请指出,谢谢。

分享到: 微信 更多