繁体   English   中英

PHP正则表达式:或子句不起作用

[英]php regex: or clause doesn't work

我需要编写一个正则表达式进行仔细检查:字符串是否在开头,结尾都包含空格,并且是否所有字符串都由空格组成,并且字符串是否仅包含数字。 我写了这个正则表达式

 $regex = '/^(\s+ )| ^(\d+)$/';

但这行不通。 怎么了 ?

^(\\d+)之前的空格使您的正则表达式无法捕获数字字符串。

它应该像下面这样:

$regex = '/^\s*\d*\s*$/';

首先,如果要除去|之间的空格。 和^。 您正在尝试在行首(^) 之前匹配一个空格,因此无法正常工作。

我不完全了解您想要什么。 仅包含空格的字符串,还是开头或结尾可能包含空格的数字? 尝试这个:

$regex = '/^\s*\d*\s*$/';

第一件事:正确利用空间!
例如(\\s+ )至少匹配一个空格( \\s+ ),然后再匹配另一个空格( )! 之间的空格也是如此| ^ 这样,您每次都会真正匹配该空间,这将导致错误的结果。

如果我说对了,而您想匹配的字符串

  • 以一个或多个空格开头或
  • 以一个或多个空格结尾或
  • 仅包含空格或
  • 仅由数字组成

我会用

/^(?:\s+.*|.*\s+$|\d+$)/

演示@ regex101

这样,您可以匹配字符串开头( \\s+.* )的空格或字符串( .*\\s+$ )末尾的( | )空格或完全数字的字符串( \\d+$ )。
根据需要插入捕获组。

如果整个字符串也由空格组成,这将匹配,因为从技术上讲,字符串然后以空格开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM