1

晚上好,我正在学习 PHP 的正则表达式。我无法做到 1 到 30 和 1 到 10。对于 1 到 9,我认为 [1-2-3-4-5-6-7-8-9] 或 [1-9]{1},哪个更正确?提前致谢 :)

4

3 回答 3

2

对于 1 到 9,有一个直接的正则表达式,即[1-9].
对于 1 到 10 和 1 到 30,将应用规则组合。
对于 1 到 10,您可以使用:

10|[1-9]


对于 1 到 30,可以使用此正则表达式:

(30)|([12][0-9])|([1-9])

或者

(30)|([12]\d)|([1-9])

第一部分30,将寻找完全匹配,即 30。
第二部分[12]\d[12][0-9],将寻找 10 到 29 之间的数字。
最后一部分[1-9]将寻找 1-9 之间的数字。

于 2013-02-06T12:35:21.303 回答
1

以下是 0 到 9 之间单个数字的有效正则表达式模式:

  • [0123456789]
  • [0-9]
  • \d

以上都是等价的。

您建议的版本[1-2-3-4-5-6-7-8-9]不正确。

要匹配 1 到 30 之间的数字,Regex 不是最好的工具,但如果您必须使用 regex,那么最简单的 regex 将是:

([012]?\d|30)

但请注意,这也将匹配0,因此它实际上是 0-30 模式。

如果你真的想要 1-30,那就更复杂了:

([1-9]|[12]\d|30)

如果数字 1-30 是您要查找的整个字符串,那么不要忘记添加^到模式的开头和$结尾以锚定它,以便它拒绝包含 1-30 和其他字符的字符串.

我确实提到正则表达式是仅用于匹配数字的错误工具,不是吗?如果您可以避免为此使用正则表达式,那么它对您来说会简单得多。这只是一个案例if($var >= 1 && $var <= 30)

希望有帮助。

于 2013-02-06T12:25:53.437 回答
0

试试这个正则表达式:

30|[12]?\d

它将匹配 1 到 30 之间的数字,没有前导零

于 2013-02-06T12:35:20.397 回答