Preg Match空字符串

33

如何使用 preg_match 匹配一个 null(空)字符串?

我需要类似下面的内容:

/([0-9]|[NULL STRING])/
5个回答

63

你可以使用^匹配行首,$匹配行尾,因此正则表达式^$可以匹配一个空行/字符串。

你的这个特定例子(一行/字符串包含单个数字或为空)可以使用最简单的正则表达式^[0-9]?$实现。


或者 ^\d?$ - 我比较喜欢 \d 而不是 [0-9],抱歉 :) - Amarghosh
@Amarghosh:我也喜欢\d,特别是因为它更容易/更短。不过,对于正则表达式初学者,在给出示例时,我喜欢坚持基础知识,因为像\d这样的花哨东西并不适用于所有正则表达式风格。 - Mikael Auno
2
在某些正则表达式引擎中,\d[0-9] 的含义并不相同。例如,在.NET中,\d 匹配 ٣(阿拉伯数字3)。 - Tim Pietzcker
如果我想要使用多个数字,我该如何编写它? - METTAIBI

5

使用PHP的正则表达式,您只需这样说:

/(\d|)/

这可能会有用...


1
是的,它可以匹配任何东西。但这并不理想。 - Novocaine

1

你也可以使用\0来匹配空字符。这是你所说的[NULL STRING]的意思吗?那个表达式可以是/([0-9]|\0)/


1

我需要用Java编写一个程序来验证信用卡号码的最后4位。这个字段是可选的,所以它可以为空,也可以是4位数字。我的解决方案如下:

^\d{4}$|^$

在典型的Java编程中,将null传递给它会导致空指针异常:
String myString = null;
last4Pattern.matcher(myString).matches(); //Null in this case.

然而,我认为这更多是Java实现问题。

1
^\d{4}?$ 更短 :) - Carl-Emil Kjellstrand

0

由于匹配空字符串并不容易,但通常可以匹配任何非空字符串,请考虑将其反过来,并且不要匹配相反的(双重否定)。

在此示例中,匹配所有不是非数字字符(\D)出现零次或一次(?)的内容:[^\D]?

(或针对特定ASCII码:[^\x00-\x29\x3a-\xff]?,或Unicode:[^\u0000-\u0029\u003a-\uffff]?

匹配“”(空字符串)、“0”、“1”...“9”,但不匹配“”(空格)、“A”(非数字)或“123”(任何更长的字符串)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接