正则表达式可验证具有特殊条件的通配符域

时间:2018-07-24 13:41:16

标签: java regex validation

我希望针对三星Knox防火墙验证通配符。请在下面查看所有域的完整条件:

  
    

用于阻止DNS解析的指定域名的URL列表。 URL的格式必须符合RFC的标准,并且还必须符合以下规则之一:

         
        
  • 完整URL:“ www.google.com”

  •     
  • 部分URL:“ android.com”; “ www.samsung ”; “ google ”。的     字符“ *”(通配符)必须位于开头和/或结尾     的网址,否则该网址无效。

  •     
  • 特殊情况,匹配任何URL:“ *”

  •     
  

有效域

Knox认为以下示例有效。

  • *。test.com
  • * test.com
  • *测试
  • *测试*
  • 测试。*
  • test1.test。*

无效的域

Knox认为以下示例无效。

  • * test-
  • *测试。
  • * test.com-
  • * test-.com

有人能伸出援手吗?我正在努力满足这一要求的所有要求。

当前代码:

(?=^\*|.*\*$)^(?:\*\.?)?(?:(?:[a-z0-9-]+(?(?=\.)(?<!-)\.(?!-)))+[a-z]+)(?:\.?\*)?$

编辑:实际上,Java似乎甚至不支持条件正则表达式。

1 个答案:

答案 0 :(得分:0)

根据您提供的示例

如果您要预过滤域,则该域将匹配您所有的“有效”示例,并拒绝所有您的“无效”示例

^[\w*]([\w*-]+[\w*])?(\.[\w*]([\w*-]+[\w*])?)*$

如果您要测试的文件或回车分隔的字段中都有所有这些字段,则可能需要使用“多行”开关,如下所示:

(?m)^[\w*]([\w*-]+[\w*])?(\.[\w*]([\w*-]+[\w*])?)*$

由于您标记了Java,因此将其编码为如下所示的Java字符串:

"(?m)^[\\w*]([\\w*-]+[\\w*])?(\\.[\\w*]([\\w*-]+[\\w*])?)*$"

编辑-除提供的示例外,还匹配所有规则

此表达式似乎有效:

^(\*|(\*|\*\.)?\w+(\.\w+)*(\.\*|\*)?)$

匹配/不匹配示例:

      MATCHING             NON-MATCHING
    ------------           ------------
    *                      *test-
    *.test.com             *test.
    *test.com              *test.com-
    *test                  *test-.com
    *test*                 test*.com
    test.*                 test.*com
    test1.test.*           -test.com