●正規表現の使用環境
Emacs Lisp

●検索か置換か?
検索

●説明
C++などでよく使われる構文にマッチさせたい。
具体的にはクラスインスタンスへのアクセスアローやドットにマッチさせたい。

●対象データ

class A;
A a;
A* a_ref = &a;

a.m_hoge;
a->m_hoge;

●希望する結果
これにマッチさせる場合
"\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z0-9][_a-zA-Z0-9]*\\)?\\)\\="
が正解らしいですが
なぜ正解かわからない部分があるので教えてください。
まず"?"演算子の使い方ですが・・・直前の文字列(空文字込み)にマッチさせるために置いてあるとして
直後の ":"が理解不能です。
後半でも、":"が出てきますがこれも不可解。名前空間の"::"などにマッチさせたいのであれば
::や:?:とかならわかるのですが・・