re2.h を使用し、部分一致を行っています。
入力文字列が「123.45.34.5:8080」であるとします。「123.45.34.5」と「8080」が返されます。
入力文字列が「123.45.34.5」であると仮定します。「123.45.34.5」と「」も返されます。正規表現の書き方は?次のコードは機能しません。
string portRegex = "[ \r\t]*([0-9a-f]*)[ \r\t]*";
string IPRegex = "([^ \r\t]*)^[^:]*";
string alertRegexStr = IPRegex + portRegex;
m_alertRegex = new RE2(alertRegexStr.c_str());
bool match = RE2::PartialMatch(input_string,*m_alertRegex,
&cip,
&source_port);
ありがとう、
アップデート
これで、次のコードが機能します。
string IPRegex = "([^ \r\t:]*)";
string portRegex = "[ \r\t]*:?[ \r\t]*([0-9a-f]*)[ \r\t]*";
しかし、質問があります。なぜ " string IPRegex = "([^ \r\t:]*?)"; " が機能しないのですか? *はどう違いますか?と* ?