我需要帮助为下面提到的日志编写正则表达式:
URLReputation: Risk unknown, URL: http://facebook.com
我写了一个如下的正则表达式:
URLReputation\:\s*(.*?),\s*URL\:\s*(.*)
这里一切正常。但如果 URL 不存在,则 URLReputation 也不会被捕获。
请帮忙。
问候,
米特什·阿格拉瓦尔
我需要帮助为下面提到的日志编写正则表达式:
URLReputation: Risk unknown, URL: http://facebook.com
我写了一个如下的正则表达式:
URLReputation\:\s*(.*?),\s*URL\:\s*(.*)
这里一切正常。但如果 URL 不存在,则 URLReputation 也不会被捕获。
请帮忙。
问候,
米特什·阿格拉瓦尔
您可以将非贪婪.*?
转换为否定字符类[^,]+
并匹配除逗号以外的任何字符。然后使用可选的非捕获组使 URL 部分成为可选的(?:...)?
您想使用.*
但也可能匹配空字符串来捕获 url 的值。
您可以通过匹配至少一个非空白字符\S+
或使用例如指定开始的模式来使模式更具体https?://\S+
URLReputation:\s*([^,]+)(?:,\s*URL:\s*(\S+))?
假设当“URL 不存在”时字符串在逗号之前立即结束,您可以简单地将逗号和后面的内容放在可选的非捕获组中并添加行尾锚:
/URLReputation: +(.*?)(?:, +URL:\ +(.*))?$/
主要是为了提高可读性,我将每个都更改\s
为空格,因为空格似乎是您希望匹配的唯一空白字符。