ファイルに次のような行があります。
Location### Location### #
Location は都市を表す文字列で、スペースは + です ("St.+Louis,+MO" など)。# は数字です。次の正規表現パターンを使用して、場所と数字 (このネットワーク トポロジ ファイル内の一意のノード ID を表す) を取得しようとしています。
START "([A-Za-z,+.]+)([0-9]+)" SPACE "([A-Za-z,+.]+)([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END
C++ regex ライブラリの使用 (Ubuntu Linux 上)。マクロは、一致するがスペースをキャプチャしないように適切に定義されています (MAYSPACE は 0 個以上の空白文字に一致します)。
私が遭遇している問題は、数字のグループが完全に空であることです! この正規表現を sed に入れると:
sed -rn 's/^([A-Za-z.+,]+)([0-9]+)/\1 \2/p' rocketfuel/weights/6461/latencies.intra
期待どおりに機能し、都市名とノード ID の両方を取得します! さらに、代わりに次の試合を試してみると:
START "([A-Za-z,+.]+).([0-9]+)" SPACE "([A-Za-z,+.]+).([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END
ノード ID はキャプチャされますが、明らかに最初の桁がありません。そこに \B 非単語境界アンカーを入れようとしましたが、うまくいきませんでした...
一致しない隣接グループでこの問題に遭遇した人はいますか? それを修正する方法について何か提案はありますか?実際のC++ライブラリのバグのようです...
Boost やその他の外部ライブラリを避けようとしているので、今のところ sed を使用して場所とノード ID の間にスペースを追加します。