在正则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的博客使用非标准的空间字符。 它看起来会起作用。