匹配正则表达式的部分

时间:2017-06-26 20:20:58

标签: regex mod-rewrite

当域名的有效起始部分时,我尝试匹配重写规则,例如:

/asd-
/asd-f
/asd-f4.
/asd-f4.n
/asd-f4.n
/asd-f4.net

我不希望它在这些无效的起始域中匹配:

/-
/-as
/as--
/asdf.4

我知道它并不完全包容,但我将有效域定义为:

  • 以字母或数字开头和结尾(不包括点和tld部分)
  • 长度为1个字符或长度且长度少于63个字符(不包括点和tld部分)
  • 仅包含字母,数字或连字符(不包括点和tld部分)
  • 连续不包含两个或多个连字符
  • 结束.com,.net或.org

现在我的正则表达式匹配有效的域名,但如果它只是以有效的域名开头,我真的没有。

RewriteRule ^/(((?!-)(?!.*--)[A-Za-z0-9-](?<!-)){1,63}(\.(com|net|org)))$ /?domain=$1 [NC]

1 个答案:

答案 0 :(得分:0)

我不确定这是否是您所需要的,但无论如何都会尝试 请注意,我认为最后一部分\.(com|net|org)是必需的。

如果 last 部分,则必须使用
其他一些锚定,如(\.(com|net|org)|(?!\S))或类似。

/([a-zA-Z0-9]|(?<!/)-(?!-)){1,63}\.(com|net|org)

扩展

 /  
 (
      [a-zA-Z0-9] 
   |  (?<! / )
      -
      (?! - )
 ){1,63}
 \.
 ( com | net | org )

或者,你可以匹配进展,但它仍然需要一些 锚定在最后(可以是任何东西)。

/([a-zA-Z0-9]|(?<!/)-(?!-)){1,63}(\.(c(om?)?|n(et?)?|o(rg?)?)?)?(?!\S)

https://regex101.com/r/4bmeCT/1

扩展

 /
 (
      [a-zA-Z0-9] 
   |  (?<! / )
      -
      (?! - )
 ){1,63}
 (
      \.
      (
           c
           ( om? )?
        |  n
           ( et? )?
        |  o
           ( rg? )?
      )?
 )?
 (?! \S )  # some anchoring required here