如何在PHP正则表达式中匹配空格字符?
我是说像"加文·舒尔茨"这两个词之间的空格。我使用正则表达式,以确保我只允许字母,数字和空格。但是我不知道怎么找到地方。这是我现在拥有的:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
如何在PHP正则表达式中匹配空格字符?
我是说像"加文·舒尔茨"这两个词之间的空格。我使用正则表达式,以确保我只允许字母,数字和空格。但是我不知道怎么找到地方。这是我现在拥有的:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
当前回答
备忘单
下面是一个关于正则表达式中空白的小备忘单:
[[:空白:]]
只能使用空格或制表符,不能使用换行符。这和写[\t]是一样的。
[[:space:]] & \s
[[:space:]]和\s是相同的。它们都将匹配任何空白字符、换行符、制表符等…
\v
匹配垂直的Unicode空白。
\h
匹配水平空白,包括Unicode字符。它还将匹配空格,制表符,非换行/数学/表意空格。
x(扩展标志)
忽略所有空白。请记住,这是一个标志,所以您将把它添加到正则表达式的末尾 像/ hello / gmx。该标志将忽略正则表达式中的空白。
例如,如果您编写了/hello world/x这样的表达式,它将匹配helloworld,但不匹配helloworld。扩展标志还允许在正则表达式中添加注释。
例子
/helloworld #hello this is a comment/
如果需要使用空格,可以使用\来匹配空格。
其他回答
我使用正则表达式来确保 只允许字母,数字和空格
然后,它就像在你已经得到的东西上添加一个空格一样简单:
$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);
(注意,我删除了s|,这似乎是无意的?当然s是多余的;你可以恢复|如果你需要它)
如果您特别想要*a*空格,就像只在一个空格中一样,那么您将需要一个比这个更复杂的表达式,并且可能需要考虑一个单独的非正则表达式逻辑部分。
在Perl中,开关是\s(空格)。
您还可以使用\b作为单词边界。对于名字,我会使用这样的东西:
[^\b]+\b[^\b]+(\b|$)
在Perl示例中修改为一个正则表达式
if( $fullname =~ /([^\b]+)\b[^\b]+([^\b]+)(\b|$)/ ) {
$first_name = $1;
$last_name = $2;
}
根据你想要的内容再次编辑:
$new_tag = preg_replace("/[\s\t]/","",$tag);
备忘单
下面是一个关于正则表达式中空白的小备忘单:
[[:空白:]]
只能使用空格或制表符,不能使用换行符。这和写[\t]是一样的。
[[:space:]] & \s
[[:space:]]和\s是相同的。它们都将匹配任何空白字符、换行符、制表符等…
\v
匹配垂直的Unicode空白。
\h
匹配水平空白,包括Unicode字符。它还将匹配空格,制表符,非换行/数学/表意空格。
x(扩展标志)
忽略所有空白。请记住,这是一个标志,所以您将把它添加到正则表达式的末尾 像/ hello / gmx。该标志将忽略正则表达式中的空白。
例如,如果您编写了/hello world/x这样的表达式,它将匹配helloworld,但不匹配helloworld。扩展标志还允许在正则表达式中添加注释。
例子
/helloworld #hello this is a comment/
如果需要使用空格,可以使用\来匹配空格。
在我看来,在这种情况下使用REGEX是多余的。为什么不直接用strpos来找空格字符呢。此外,正则表达式中的空格字符没有什么特别之处,您应该能够像搜索任何其他字符一样搜索它。也就是说,除非您禁用了模式空白,在本例中几乎不需要这样做。