如何在PHP正则表达式中匹配空格字符?
我是说像"加文·舒尔茨"这两个词之间的空格。我使用正则表达式,以确保我只允许字母,数字和空格。但是我不知道怎么找到地方。这是我现在拥有的:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
如何在PHP正则表达式中匹配空格字符?
我是说像"加文·舒尔茨"这两个词之间的空格。我使用正则表达式,以确保我只允许字母,数字和空格。但是我不知道怎么找到地方。这是我现在拥有的:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
当前回答
要精确匹配空格字符,可以使用八进制值\040(显示为八进制的Unicode字符)或十六进制值\x20(显示为十六进制的Unicode字符)。
下面是regex语法参考:https://www.regular-expressions.info/nonprint.html。
其他回答
我正在尝试[[:space:]]在一个实例中,它看起来像博客在WordPress中使用非标准的空格字符。看起来它会起作用。
我使用正则表达式来确保 只允许字母,数字和空格
然后,它就像在你已经得到的东西上添加一个空格一样简单:
$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);
(注意,我删除了s|,这似乎是无意的?当然s是多余的;你可以恢复|如果你需要它)
如果您特别想要*a*空格,就像只在一个空格中一样,那么您将需要一个比这个更复杂的表达式,并且可能需要考虑一个单独的非正则表达式逻辑部分。
如果你要找空格,那就是“”(一个空格)。
如果你要找一个或多个,它是“*”(两个空格和一个星号)或“+”(一个空格和一个加号)。
如果您正在寻找通用间距,请使用“[X]”或“[X][X]*”或“[X]+”,其中X是物理制表符(在所有这些示例中,每个制表符前面都有一个空格)。
这些将在我所见过的所有*正则表达式引擎中工作(其中一些甚至没有一个或多个“+”字符,啊)。
如果你知道你将使用一个更现代的正则表达式引擎,“\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
要精确匹配空格字符,可以使用八进制值\040(显示为八进制的Unicode字符)或十六进制值\x20(显示为十六进制的Unicode字符)。
下面是regex语法参考:https://www.regular-expressions.info/nonprint.html。
在我看来,在这种情况下使用REGEX是多余的。为什么不直接用strpos来找空格字符呢。此外,正则表达式中的空格字符没有什么特别之处,您应该能够像搜索任何其他字符一样搜索它。也就是说,除非您禁用了模式空白,在本例中几乎不需要这样做。