我有一些正则表达式:
(\d+\.)+
它的实现字符串如1.234.2421.222.11 我可以限制整个字符串的最大长度(不是组的数量)吗?
非常感谢
答案 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+$
(固定为不需要尾随.
字符)并且在同一个正则表达式中嵌入长度检查。您需要分别用最小和最大尺寸替换M
和N
。
如果您的引擎不是那么现代化,那么您需要做两个正则表达式:
^.{M,N}$
^(\d+\.)*\d+$
并确保它们传递两者。第一个是长度检查,第二个是内容检查。
但是你可能会发现正则表达式对于长度检查来说是过度的,用Length()
检查字符串长度可能更容易。