regex - "not character"的正则表达式与预期不匹配

标签 regex

我正在尝试满足下一个限制:

  • line 有 3 到 256 个字符,它们是 a-z、0-9、dash - 或 dot 。
  • 此行不能以 -
  • 开始或结束

    我想得到一种下一个输出:
    aaa  -> good
    aaaa -> good
    -aaa -> bad
    aaa- -> bad
    ---a -> bad
    

    A 有一些没有给出正确答案的正则表达式:
    1) ^[^-][a-z0-9\-.]{3,256}[^-]$将所有测试线视为不良;

    2) ^[^-]+[a-z0-9\-.]{3,256}[^-]+$将前三行视为一个匹配字符串,因为我猜 [^-] 匹配新行。

    3) ^[^-]?[a-z0-9\-.]{3,256}[^-]?$ (?对于一个或零匹配的破折号)使所有测试线都一样好

    真相在哪里?我感觉到它要么接近我的,要么更复杂。

    附言我使用 python 3 re 模块。

    最佳答案

    这个几乎是正确的:^[^-][a-z0-9\-.]{3,256}[^-]$[^-]开头和结尾已经代表一个字符,因此您需要更改 {3,256}进入 {1,254}
    此外,您可能只需要 a-z、0-9 和 .在开始和结束(不仅仅是 - 之外的任何内容),所以完整的正则表达式变为:

    ^[a-z0-9.][a-z0-9\-.]{1,254}[a-z0-9.]$
    

    关于regex - "not character"的正则表达式与预期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269523/

    相关文章:

    regex - 为什么我的正则表达式会因某些替换而失败?

    c++ - 正则表达式无法通过 getline() 输入正常工作

    php - 正则表达式不在括号中

    jquery - 使用 jquery 从 HTML 页面中提取名称

    regex - 从文件加载正则表达式并在 Perl 中匹配组

    javascript检查字符串是否只包含字母数字字符+其他特殊字符

    java - 需要正则表达式来分隔逗号分隔值(来自路由器查询输出的接口(interface)列表)

    ruby-on-rails - 将 ActiveRecord 数组序列化属性转换为字符串

    regex - 用于从任何输入字符串中提取第二个数值的正则表达式,例如从字符串 "this23 is 67 test 56 string 45"获取数字 67 。

    javascript - 如何使用 javascript 正则表达式检查 "empty"表单字段?