匹配正则表达式中的空格

新手上路,请多包涵

如何匹配 PHP 正则表达式中的空格字符?

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

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

原文由 Gavin Schulz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

如果您正在寻找一个空格,那就是 " " (一个空格)。

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

如果您正在寻找公共间距,请使用 "[ X]""[ X][ X]*""[ X]+" 其中每个 X 是物理制表符(和 30029833594da063abec4c2f742)在所有这些示例中,前面都有一个空格)。

这些将适用于我见过的 每个\* 正则表达式引擎(其中一些甚至没有一个或多个 "+" 字符,呃)。

如果您知道您将使用更现代的正则表达式引擎之一, "\s" 及其变体是可行的方法。此外,我相信单词边界也匹配行的开头和结尾,这在您查找可能出现的单词之前或之后没有空格时很重要。

特别是对于 PHP, 此页面 可能会有所帮助。

从您的编辑中,您似乎想要删除所有无效字符这开始是(注意正则表达式内的空格):

 $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

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 3.0 许可协议

备忘单

这是您需要了解的有关正则表达式中空格的所有内容的小备忘单:

[[:blank:]]

仅限空格或制表符,而不是换行符。这与写 [ \t] 相同。

[[:space:]] & \s

[[:space:]]\s 是一样的。它们都将匹配任何空白字符空间、换行符、制表符等……

\v

匹配垂直 Unicode 空白。

\h

匹配 水平 空白,包括 Unicode 字符。它还将匹配空格、制表符、不间断/数学/表意空格。

x (e X 倾向于标志)

忽略所有空格。请记住,这是一个标志,因此您将其添加到正则表达式的末尾,例如 /hello/gmx 。此标志将忽略正则表达式中的空格。

例如,如果您编写类似 /hello world/x 的表达式,它将匹配 helloworld ,但不匹配 --- hello world 。扩展标志还允许在您的正则表达式中添加注释。

例子

/helloworld #hello this is a comment/

如果需要使用空格,可以使用 \ 来匹配空格。

原文由 Fletcher Rippon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题