php 正则匹配空格用什么,关于php:在正则表达式中匹配空格

我需要在PHP正则表达式中匹配一个空格字符。 任何人有任何想法吗?

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

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

嗯...对于匹配a或b ...也毫无疑问...;)

您应该看到正则表达式示例

如果要查找空格,则为""(一个空格)。

如果要查找一个或多个,则为" *"(两个空格和一个星号)或" +"(一个空格和一个加号)。

如果要查找公共间距,请使用"[ 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

他原来的正则表达式似乎要替换""字符。您正在否定空间,因此不会按预期"删除"他的空间。

引述:"只允许字母,数字和空格",加文斯原本的RE是错误的(这就是他问这个问题的原因)。我的RE删除了所有不属于其中之一的内容。

为什么空格必须位于匹配模式的末尾而不是中间?

@沃伦,它没有。这里的空格注释并没有说明该空间的去向,而是表示那里有一个空格(以防读者没有意识到)。

@Mike,不,不是这样。此处的意图是替换不在集合A-Za-z...中的所有字符。方括号内的尖号指示了这一点。将插入符号移动到方括号之外,将其含义更改为与字符串开头的集合中的字符匹配。

\040与空格字符完全匹配。

Regexp PHP参考

新链接

正则表达式PHP的转义序列

链接不再起作用

这是您需要了解的有关正则表达式空白的所有信息:

[[:blank:]]仅空格或制表符

[[:space:]]空格

\s任何空格字符

\v垂直空格

\h水平空白

X忽略空格

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

这是不正确的-它会收集所有空格,而不仅仅是空格字符。

在我看来,在这种情况下使用REGEX可能实在是太过分了。为什么不仅仅通过strpos来找到空格字符。同样,正则表达式中的空格字符也没有什么特别的,您应该能够像搜索其他任何字符一样搜索它。也就是说,除非禁用了模式空白,否则在这种情况下几乎没有必要。

I am using a regex to make sure that I

only allow letters, number and a space

然后,就像在现有内容上添加一个空格一样简单:

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

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

如果您特别想要* a *空间(仅在单个空间中),则将需要一个比此更复杂的表达式,并且可能需要考虑单独的非正则表达式逻辑。

您也可以将 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);

像这样使用它可以留出单个空间。

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

我正在尝试[[:space:]]在一个实例中,看起来WordPress中的博主正在使用非标准的空格字符。看起来会起作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值