【发布时间】:2011-09-04 03:22:51
【问题描述】:
我需要匹配以下字符串的这些部分:
(user)@(hostname):(port)
可以选择匹配用户和端口。 首先我用这个正则表达式管理它:
(?:([^@]*)@)?([^\:]+)(?:\:(\d+))?
这匹配foo@bar:80
foo
bar
80
但是对于像foo@[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:80 这样的 IPv6 主机,前面的正则表达式将无法按预期工作:
foo
[2001
0
所以现在我正在思考一个正则表达式,它也可以匹配带有冒号的方括号括起来的主机,但没有方括号。 :) 我已经用下面的正则表达式做到了:
(?:([^@]*)@)(?:\[(.+)\]|([^:]+))(?:\:(\d+))?
foo
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
<empty>
80
但是.. 这很难看,因为 2 或 3 将是空的。
有没有办法将它与一个反向引用结合起来?
我正在使用 boost::regex,据我所知,它使用 perl 的正则表达式引擎。
感谢和问候
真实
【问题讨论】:
标签: c++ regex url boost-regex authority