次の文字列のこれらの部分を一致させる必要があります。
(user)@(hostname):(port)
ユーザーとポートはオプションで一致させることができます。最初に、次の正規表現で管理しました。
(?:([^@]*)@)?([^\:]+)(?:\:(\d+))?
これはfoo@bar:80
foo
bar
80
しかし、のような IPv6 ホストにfoo@[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:80
なると、前述の正規表現は期待どおりに機能しません。
foo
[2001
0
だから今、私は、角括弧で囲まれたホストをコロンで囲み、角括弧なしで一致させることができる正規表現について考えています。:)私は次の正規表現でそれを行いました:
(?:([^@]*)@)(?:\[(.+)\]|([^:]+))(?:\:(\d+))?
foo
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
<empty>
80
2
しかし..どちらか3
が空になるので、これは醜いです。これを 1 つの後方参照に結合する方法はありますか?
私が知る限り、perl の正規表現エンジンを使用する boost::regex を使用しています。
感謝と敬意
再販