正则表达式帮助 - 1 个案例我需要处理

标签 regex

这是一种做我想做的事,但在我希望真实的情况下失败了。是的,我将在域中使用它,但是在有人继续讨论这对于任何域都不起作用之前,需要更多的东西来正确验证它,等等......这在我的使用中会工作得很好如果我能处理最后两个案例。我不需要验证正确的格式,只需要确保它处理我下面提到的情况。基本上我正在寻找:

  • 任何 *.extension(a-z 超过 2 个字符)为 true
  • 任何domain.extension或unlimited-subdomains.domain.extension为true
  • 整个字符串以 * 开头的上述任一情况。说实话

到目前为止我得到了什么:

regex101.com of my current regex

/^(?:\*\.)?([a-z0-9-]{1,255}\.)+[a-z]{2,}$/i
  • (?:\*\.)? - 可以选择以 * 开头。

  • ([a-z0-9-]{1,255}\.)* - 0 个或多个 1-255 之间以 . 结尾的 a-z0-9-

  • [a-z]{2,} 以 a-z 结尾,介于 2-?

我想要判断真/假的示例:

  • 测试 - false
  • .test - false
  • *.test - true
  • test.test - true
  • *.test.test - true

当前在 *.test 上失败 - 我希望这是真的。

编辑:

这“有效”,但引入了一个错误的新测试。 *.*.test 应该为 false。

new regex

/^((?:\*\.)?([a-z0-9-]{1,255}\.)+[a-z]{2,})|\*.[a-z]{2,}$/i

最佳答案

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

/^(\*\.|([a-z0-9-]{1,255}\.))([a-z0-9-]{1,255}\.)*[a-z]{2,}$/i

说明:

^ - 从字符串开头匹配

( - 创建群组

\*\. - 匹配 EITHER 星号 * 和点 .

| -

([a-z0-9-]{1,255}\.) - 匹配以点 结尾的第一部分。

) - 末端基团

([a-z0-9-]{1,255}\.)* - 匹配以点结尾的重复部分 .

[a-z]{2,}$ - 匹配字符串的最后部分和结尾

请注意,中间部分是可选的,可以重复。

关于正则表达式帮助 - 1 个案例我需要处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74105155/

相关文章:

c# - 使用正则表达式将长度在 2 到 8 之间的数字替换为特定字符

javascript - 替换 url 中变量的值

ruby-on-rails - cucumber 步骤中的正则表达式

java - 如何使用 Java 的 String.replaceAll 方法替换以 $ 字符开头的字符串

r - 根据条件更新多行

python - 删除带有重复字符的字符串 [Python]

java - 使用 contains() java 读取大文件并进行过滤

c# - 逗号分隔数字或数字的正则表达式

javascript - javascript 语言的正则表达式

Python Regex - 如何获取匹配的位置和值