我有这个字符串:
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}不存在正则表达式不会后退任何东西
由于我的经验不足,我无法解决这个问题,我怎么能得出这个结果呢?
答案 0 :(得分:3)
如何在端口后创建新的捕获组
([a-zA-Z]{3,4}://.+?):(\d+)(.+?timeout=(\d+).?)?
完成了;
tcp://10.0.0.1:11211
分28步
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)