使用XML正则表达式验证代理网址(Validate proxy URL using XML rege

2019-09-30 04:30发布

我使用的XML正则表达式匹配我的代理URL。

如:代理:ab-proxy-sample.company.com:8080

我的要求:

  1. 应该以http://https://(匹配整个字)
  2. 应该接受任何字符串+端口
  3. 应该接受甚至字符串开头HT

我现在的XML正则表达式是:[^ HTTP:// | https://开头] +:[0-9] + |

但其匹配的每一个字母,而不是整个单词?

任何帮助将高度赞赏。 提前致谢 !

Answer 1:

作为@arnep指出,你试图使用一个否定的字符类与交替 ,这不是它的工作方式。 此外,这里是对于一些信息向前看符号 。

我敢肯定,别人会发布一个答案,你可以复制和粘贴,但这是学习正则表达式的基础知识很好的机会!

更新:

我不知道,你正在使用不支持负lookarounds发动机。 如果没有负面lookarounds,这几乎是不可能实现你想要做什么。

;)

这里是一个“蛮力”做这件事的组合学方法:

(?:[^h]|h(?:[^t]|t(?:[^t]|t(?:[^p]|p(?:[^s:]|s(?:[^:]|:(?:[^\/]|\/(?:[^\/])))|:(?:[^\/]|\/(?:[^\/])))))))\S+:\d+
  1. 如果XML引擎不支持非捕获组,即(?: ... )然后使用普通组,而不是:

     ([^h]|h([^t]|t([^t]|t([^p]|p([^s:]|s([^:]|:([^\/]|\/([^\/])))|:([^\/]|\/([^\/])))))))\S+:\d+ 
  2. 如果XML引擎不支持的字符类,如\S\d然后用[^ \t\r\n\p][0-9]来代替。

这里是一个正在运行的例子: http://rubular.com/r/JnpCVgeLmL 。 尝试改变测试字符串。 你会看到...

    ab-proxy-sample.company.com:8080          # matches
    htab-proxy-sample.company.com:8080        # matches
    http://ab-proxy-sample.company.com:8080   # doesn't
    https://ab-proxy-sample.company.com:8080  # doesn't
    httpd://ab-proxy-sample.company.com:8080  # matches

请注意, 您不需要^$ 。 我添加这些专门为Rubular演示,但显然XML引擎假定该条件(锚定岬)。

这是如何运作的? 它更容易理解,如果我们打破它,就像这样:

    ([^h] | h
    ([^t] | t
    ([^t] | t
    ([^p] | p
    ([^s:]| s ([^:]|:([^\/]|\/([^\/])))
          | :        ([^\/]|\/([^\/])))
    ))))
    \S+:\d+

说明:

  1. 如果第一个字符是不是一个“H”,那也不错! (字符串不可能是 “HTTP://” 或 “https://”)。
  2. 如果第一个字符 “H”,虽然,那么:
    1. 如果第二个字符是不是一个“T”,那么伟大! (字符串不可能是 “HTTP://” 或 “https://”)。
    2. 如果第二个字符一个“T”,虽然,那么:
      1. ......是不是“T”,太棒了!
      2. ...... “T”,则:
        1. ......是不是“P”,太棒了!
        2. ... “P”,则:

在这里,它变得棘手:现在我们遇到的三个分支。

  1. 如果第五字符不是一个“S”,也不是“:”,然后太棒了!
  2. 如果第五字符一个“S”,虽然,那么:
    1. 如果第六char是不是“:”再大的!
    2. 如果第六字符 “:”虽然,那么:
      1. 如果第七char是不是一个“/”,然后太棒了!
      2. 如果第七字符一个“/”,虽然,那么:
        1. 如果第八char是不是一个“/”,然后太棒了!
        2. 否则,失败! 我们发现的 “https://开头”。
  3. 如果第五字符 “:”虽然,那么:
    1. 如果第六char是不是一个“/”,然后太棒了!
    2. 如果第六字符一个“/”,虽然,那么:
      1. 如果第七char是不是一个“/”,然后太棒了!
      2. 否则,失败! 我们发现一个 “HTTP://”。

最后,如果我们已经远远获得这样的,那么我们寻找的非空白字符的字符串,后跟一个冒号,然后是一串数字。

我让一个聪明的数学家比自己去思考所有字符串是否使用lookarounds可以为匹配“野蛮强迫”以这样的方式。



Answer 2:

为了避免匹配开始与一些词串,提前使用负的样子:

^(?!https?).*$

将匹配不以HTTP(S)开始的任何字符串。 其他的要求是留给读者作为一个练习:-)



文章来源: Validate proxy URL using XML regex pattern
标签: xml regex url