当前位置: 首页 > 知识库问答 >
问题:

正则表达式长度问题

慕项明
2023-03-14

我正在尝试构建一个正则表达式,它接受具有以下条件的域名:

  1. 允许DNS名称(仅允许连字符、句点和字母数字字符)最多255个字符
  2. 连字符只能出现在字母之间
  3. 应该以字母开头,以字母结尾。它至少有3个字符(字母和句点必填,连字符可选)。
  4. 周期前标签的长度应为63

可能的情况:

  1. a、 b.c
  2. a-a.b

不该通过的案子

  1. a-b
  2. q wert q wert q wert q wert q wert q wert q wert q wert q wert q wert q wert q wert q we rh hg. v
  3. aaaa
  4. aaa-a

我建造的是这样的:

^(([a-zA-z0-9][A-Z0-9a-z-]{1,61}[a-zA-Z0-9][.])+[a-zA-Z0-9]+)$

但这不接受a.b.c

共有2个答案

秦彦君
2023-03-14
匿名用户

您可以使用以下正则表达式:

/^(?=[A-Z])((?:[A-Z\d]|(?<=[A-Z])-(?=[A-Z])){1,63})(?<=[A-Z])(?:\.[A-Z\d]+){1,2}$/im

细节:

  • ^-字符串的开头。
  • (?=[A-Z])-正面前瞻:整个字符串必须以字母开头。
  • -捕获组-域名。
    • (?:-非捕获组的开始,由于以下量词而需要。
    • [A-Z\d]-第一种选择:字母或数字。
    • |-或者。
    • <代码>(?
    • <代码>\。[A-Z\d]-一个点和一系列字母或数字

    您肯定应该使用i(不区分大小写)选项,如果您检查了许多字符串,每个字符串都在一个单独的行中,那么也应该使用m(多行)选项。

    我没有包括整个长度的任何测试,但你也没有包括。我认为,这里的主要任务是展示如何匹配正则表达式失败的情况。

张姚石
2023-03-14

您可以使用

^(?=.{1,255}$)(?=[^.]{1,63}(?![^.]))[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:[.](?=[^.]{1,63}(?![^.]))[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)+(?:[.][a-zA-Z0-9-]*[a-zA-Z0-9])?$

请参阅此处的正则表达式演示。

图案细节

  • ^-字符串的开头
  • (?=.{1255}$)-整个字符串应该有1到255个字符
  • (?=[^.]{1,63}(?![^.])-必须有1到63个字符,而不是 在字符之前,而不是 或字符串结尾
  • [a-zA-Z0-9]-1个或多个字母数字字符
  • (?:-非捕获组的开始:
    • --连字符
    • [a-zA-Z0-9]-1个字母数字字符
    • [.]-一个点
    • (? =[^.]{ 1,63}(?![ ^.]))-必须有1到63个字符,而不是在字符之前,而不是或字符串末尾
    • [a-zA-Z0-9]-1个字母数字字符
    • (?:-[a-zA-Z0-9])*-的0次或更多次重复-后跟1个字母数字字符
    • 一个点

 类似资料:
  • 我不确定这是否可以使用正则表达式。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。 我的数据库(postgresql)接受为15,6(最多15位,最多6位小数),因此如果我有10位整数,我可以有5位小数。小数分隔符被忽略。 我目前有一个正则表达式(逗号是小数分隔符): 它不验证总长度,只验证左侧的数字。但由于用户也可以键入点(千位分隔符),我有一个怪物:

  • 问题内容: 我的代码: 输出: 我知道的 : “一个?” 代表零个或一次出现的字符“ a”。 Java API说: matcher.start()返回上一个匹配项的起始索引。 matcher.end()返回匹配的最后一个字符后的偏移量。 matcher.group()返回与上一个匹配项匹配的输入子序列。对于具有输入序列s的匹配器m,表达式m.group()和s.substring(m.start(

  • 问题内容: 我使用以下正则表达式而不限制任何字符长度 在上面,当我尝试将字符长度限制为如下所示的15个时,会引发错误。 请帮助我使上述regEx的字符数限制为15。 问题答案: 您不能将量词应用于锚点。相反, 要限制输入字符串的长度,请 在开头使用锚定先行: 另外,我假设您想将0个或多个字母或数字与匹配。它应该看起来像(即在此处使用字符类)。 为什么不最后使用限制量词,例如? 量词仅应用于左侧的子

  • 我有以下正则表达式: 这允许: 开头可选 然后是数字、点、逗号、圆括号、破折号和空格。 除此之外,我需要确保数字和加号(如果存在)的长度在9到15之间(所以我不计算符号之外的任何特殊字符)。 最后一个条件是我有问题的地方。 有效输入: 358(9)1234567 无效输入: 3.5 8.9,1-2(3)4.5,6.77777(33个字符,只有20个计数字符(数字和加号)太多) 如果可能的话,使用正

  • 我想验证一个数字最大长度为13、小数点为2的货币字符串。我用逗号作为十进制分隔符,用句点作为千位分隔符。 我有一个正则表达式: For sintax有效,但不适用于最大长度。我需要在这个正则表达式中添加什么? 例如,这些字符串必须有效: 这些必须是无效的:

  • 问题内容: 我有这个正则表达式使用向前和向后的前瞻: 我正在尝试将其从C#移植到Python,但始终收到错误 是否有可能用Python重写而不会失去意义? 这个想法是为了匹配类似 更新资料 我正在使用环顾四周解析已修改的HTTP多部分文本 我想在进行拆分时只获取文件路径和其他文本,而不必删除开始和结束标签 简短的代码很重要,但是如果它使正则表达式可行,我愿意更改格式。 问题答案: 对于同一数组中的