正则表达式参数url(如果存在)

时间:2015-06-06 13:17:30

标签: regex

我有这个字符串:

tcp://10.0.0.1:11211?rep=12&timeout=12

所以我尝试了:

(tcp://.+):([0-9]+)\?.*\&+timeout=([0-9]+).*

我需要检索:

  • tcp://10.0.0.1即服务器
  • 11211即端口
  • timeout参数值(在本例中为12)

tcp://10.0.0.1:11211部分在任何情况下都存在,所以我需要它,但查询部分不是必需的,所以我的问题是如果?timeout或{{1}不存在正则表达式不会后退任何东西 由于我的经验不足,我无法解决这个问题,我怎么能得出这个结果呢?

Regex101 Demo

3 个答案:

答案 0 :(得分:3)

如何在端口后创建新的捕获组

([a-zA-Z]{3,4}://.+?):(\d+)(.+?timeout=(\d+).?)?

完成了;

tcp://10.0.0.1:11211分28步

42个步骤

tcp://10.0.0.1:11211?timeout=12

tcp://10.0.0.1:11211?rep=12&timeout=12共48个步骤

答案 1 :(得分:0)

以下正则表达式似乎对我有用。

(tcp://.+):([0-9]+)(\?.*\&+timeout=([0-9]+).*|)

这是基于你的正则表达式。询问标记(\?.*\&+timeout=([0-9]+).*)之后的部分刚刚包含在(...|)中。

如果某些内容可能不存在,通常会使用(pattern|),但您需要使用正则表达式来匹配整个字符串。

答案 2 :(得分:0)

通过添加?

,您可以在匹配后选择模式
(tcp://.+):([0-9]+)(\?.*\&?timeout=([0-9]+).*)?
                   ↑      ↑                  ↑↑

请参阅DEMO