1

私はこれらの文字列を持っています、私はそれらのパターンを確認する正規表現を返したいです。

NS::varible.child // OK
variable.child // OK
NS:variable.child // NO MATCH
::variablename.child // OK
:variablename.child // NO MATCH
_variablename.child.x // OK
5variablename.child.x // NO MATCH

->演算子とテンプレート<>なしでC++変数名を一致させたい

私はこの正規表現を思いついた。

[a-z\_:{2,2}A-Z][a-z\_A-Z0-9\.:{2,2}]*

:{2,2}私がやりたいことをしていないようです。単一のコロンも受け入れます。

2つのコロンを正確にチェックするにはどうすればよいですか?C ++変数構造に一致する正規表現はさらに優れていますか?

4

3 に答える 3

2

^(\ w + | ::)(:: |。)\w+。\w+

それを試してみてください。「::」を文字通り使用して、2つの「:」を一致させることができます

于 2012-10-18T14:11:22.350 に答える
2

オプションの1つ:

/^((::)?[_a-zA-Z.]+)+$/

Rubularでオンラインで遊んでください。

于 2012-10-18T14:13:30.557 に答える
1

@Wiseguyが言ったように、文字クラス([ ])内で特殊文字を使用することはできません。正しい解決策は、グループ化を使用して、リテラルと文字クラスを交互に使用することです。

([a-zA-Z]|::)

編集:より完全に説明された

キャラクタークラスについて考える場合、それはとにかくグループを書くための特殊な方法にすぎません。

(a|b|c|d|e|f|g)

と同じです:

[a-g]

したがって、追加のキャラクターにグループを使用することで、同じことを実現できます。

于 2012-10-18T14:08:29.550 に答える