3

我需要一个正则表达式来允许单个 0 或任何其他不以零开头的数字,因此:

允许使用 0 或 23443 或 984756,但不允许使用 0123。

我有以下仅允许 1 到 9

[1-9]\d
4

2 回答 2

7

寻找一个单独的 0 或 1-9,后跟任何其他数字。

^(0|[1-9]\d*)$

如果要匹配较大字符串中的数字,请使用单词边界标记\b代替^and $

\b(0|[1-9]\d*)\b
于 2012-12-19T16:24:36.667 回答
0

您无需将所有内容强制转换为单个正则表达式即可执行此操作。

如果您使用多个正则表达式会更清楚,每个正则表达式都进行特定检查。在 Perl 中,您会这样做,但您可以将其适应 C# 就好了。

if ( ($s eq '0') || (($s =~ /^\d+$/) && not ($s =~ /^0/)) )

您已明确说明意图是什么:

if ( (string is '0') OR ((string is all digits) AND (string does not start with '0')) )

请注意,第一次检查字符串是否0根本不使用正则表达式,因为您正在与单个值进行比较。

使用宿主语言的表达形式,而不是试图将逻辑塞进正则表达式。

于 2012-12-19T17:15:55.557 回答