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

时间:2014-01-13 09:43:24

标签: php regex

我需要编写一个正则表达式进行双重检查:如果一个字符串在开头,末尾包含空格,如果所有字符串由空格组成,并且字符串只包含数字。 我写了这个正则表达式

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

但它不起作用。怎么了?

3 个答案:

答案 0 :(得分:1)

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

应该如下:

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

答案 1 :(得分:1)

首先,如果全部,删除|之间的空格和^。您正尝试在行之前匹配空格(^),以便无法使用。

我并不完全明白你想要什么。一个只包含空格的字符串,或者在开头或结尾可能有空格的数字?试试这个:

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

答案 2 :(得分:1)

首先要做的是:让你的空间正确! 例如,(\s+ )将匹配至少一个空格(\s+),后跟另一个空格()!同样适用于|^之间的空格。这样你每次都会按字面意思匹配空间,这会导致错误的结果。

如果我说得对,你想匹配

的字符串
  • 以一个或多个空格OR
  • 开头
  • 以一个或多个空格结束或
  • 仅由空格OR
  • 组成
  • 仅包含数字

我用

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

Demo @ regex101

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

如果整个字符串也包含空格,这将匹配,因为从技术上讲,字符串以空格开头。