在正则expression式中匹配一个空格

我需要匹配PHP正则expression式中的空格字符。 任何人有任何想法?

我的意思是像“gavin schulz”,这两个词之间的空间。 我正在使用正则expression式来确保我只允许字母,数字和空格。 但我不知道如何find空间。 这就是我现在所拥有的:

$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag); 

如果你正在寻找一个空间,这将是" " (一个空间)。

如果你正在寻找一个或多个,它是" *" (这是两个空格和一个星号)或" +" (一个空格和一个加号)。

如果你正在寻找共同的间距,使用"[ X]""[ X][ X]*""[ X]+" ,其中X是物理制表符(每个前面都有一个空格这些例子)。

这些将在我见过的每个正则expression式引擎中都有效(其中一些甚至没有一个或多个"+"字符,呃)。

如果你知道你会使用一个更现代的正则expression式引擎, "\s"及其变体是要走的路。 另外,我相信单词的边界也是匹配的开始和结束,当你在寻找没有前后空格的单词的时候,这一点很重要。

对于PHP来说, 这个页面可能会有所帮助。

从你的编辑,看来你想删除所有无效的字符开始是(注意正则expression式里面的空间):

 $newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag); # ^ space here 

如果你还想弄虚作假,以确保每个词之间只有一个空格,而不是在开始或结束时,这是一个更复杂一点(也可能是另一个问题),但基本的想法是:

 $newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space $newtag = preg_replace ("/^ /", "", $tag); # remove space from start $newtag = preg_replace ("/ $/", "", $tag); # and end 

\040完全匹配空格字符。

正则expression式PHP参考

在我看来,在这种情况下使用REGEX只是矫枉过正。 为什么不只是为了find空间的特性而已 。 此外,正则expression式中的空格字符没有什么特别之处,您应该能够像search任何其他字符一样search它。 也就是说,除非你禁用了模式空白,在这种情况下几乎没有必要。

您也可以使用\ b作为单词边界。 对于名字,我会使用这样的东西:

 [^\b]+\b[^\b]+(\b|$) 

编辑修改这是Perl例子中的正则expression式

 if( $fullname =~ /([^\b]+)\b[^\b]+([^\b]+)(\b|$)/ ) { $first_name = $1; $last_name = $2; } 

再次编辑基于你想要的:

 $new_tag = preg_replace("/[\s\t]/","",$tag); 

我正在使用正则expression式来确保我只允许字母,数字和空格

然后就像给已经有的东西添加空间一样简单:

 $newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag); 

(注意,我删除了s|这似乎是无意的,当然s是多余的,如果需要的话可以恢复)

如果你特别需要* a *空间,那么就需要一个比这更复杂的expression式,而且可能要考虑一个单独的非正则expression式逻辑。

在Perl中,开关是\s (空格)。

我正在尝试[[:space:]],它看起来像WordPress的博客使用非标准的空间字符。 它看起来会起作用。