正则表达式最大长度限制

时间:2011-06-28 07:41:06

标签: regex

我有一些正则表达式:

(\d+\.)+

它的实现字符串如1.234.2421.222.11 我可以限制整个字符串的最大长度(不是组的数量)吗?

非常感谢

2 个答案:

答案 0 :(得分:7)

请注意,(\d+\.)+1.234.2421.222.11完整匹配。您的模式要求它应以.结尾。你可能想要这样的模式:

\d+(\.\d+)*

要给输入字符串一个最大长度,比如最多15个字符,请执行以下操作:

^(?=.{0,15}$)\d+(\.\d+)*$

假设您的正则表达式实现支持预测。

修改

好的,如果您的正则表达式实现不支持预测,请分两步完成。像这样的东西(伪代码):

if input matches ^\d+(\.\d+)*$ and ^.{0,15}$ do
  ....
end

或者,正如paxdiablo所提到的,使用您的编程语言的内置函数来获取字符串的长度。

答案 1 :(得分:4)

如果您的正则表达式引擎支持前瞻,您可以使用以下内容:

^(?=.{M,N}$)(\d+\.)*\d+$

(固定为不需要尾随.字符)并且在同一个正则表达式中嵌入长度检查。您需要分别用最小和最大尺寸替换MN

如果您的引擎不是那么现代化,那么您需要做两个正则表达式:

^.{M,N}$
^(\d+\.)*\d+$

并确保它们传递两者。第一个是长度检查,第二个是内容检查。

但是你可能会发现正则表达式对于长度检查来说是过度的,用Length()检查字符串长度可能更容易。