递归正则表达式,在两个不同的标签下捕获相同的文本

时间:2016-05-12 21:04:02

标签: regex

我希望使用正则表达式解析一些文本,我需要能够在两个不同的标签下抓取相同的文本,同时只捕获第二个标签上某个字符之前的文本。以下是我试图引入的文本示例。

Reputation=High risk ProtocolP=SSL client Web_Application=YouTube URL=https://youtube.com

这是我到目前为止所写的RegEx。

^Reputation=(?<rep>.*?)\sProtocol=(?<prot>.*?)\sWeb_Application=(?<webapp>.*?)\sURL=(?<url>[http|https].*?)\sSource_IP=(?<sip>.*?)\s

这让我得到了我最初需要的东西,但我需要为URL部分添加第二个标记以仅获取域名。例如,仅https://youtube.com

当然,如果域恰好是https://m.youtube.com,那么也应该捕获它。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您可以将网址匹配部分替换为URL=(?<url>https?://(?<domain>[^/\s]+)(?:/[^\s]+)*)

Reputation=(?<rep>.*?)\sProtocolP=(?<prot>.*?)\sWeb_Application=(?<webapp>.*?)\sURL=(?<url>https?://(?<domain>[^/\s]+)(?:/\S+)*)\sSource_IP=(?<sip>.*?)\s

请参阅regex demo

  • https?:// - 匹配http://https://
  • (?<domain>[^/\s]+) - 域匹配部分,除/以外的1个以上字符和空格
  • (?:/\S+)* - {+ 1}}的0 +序列,后跟除空格以外的1 +字符