2017-11-09 11 views
0

ハイフンで区切られた2つの異なる16進数の4文字のグループを含む文字列に一致する正規表現を作成しようとしています。例えばこの式は、[OK]を作品複数のグループに一致する正規表現

00AA-10F2
14ED-7F09
1A20-A55Fを

[0-9A-F]{4}-[0-9A-F]{4} 

が、達成するための、より簡潔な方法があります場合、私は思っていました同じこと。

違いがある場合は、C++ 11 std::regex(現在はデフォルト/ ECMAScriptモード)を使用しています。

本当にありがとうございます。

ありがとう、

リッチ。

+0

いいえ、 'std :: regex'以外の方法はありません。もちろん、[[0-9A-F] {4} 'を保持する変数を使ってパターンを動的に構築することもできますが、このパターンには意味がないと思います。 –

+0

他の環境では、パターンの前半部分を再利用するために '([0-9A-F] {4}) - (?1)'のようなものを使うことができますが、これは 'std: Wiktorが言ったように:regex'なぜそれをもっと短くしたいのですか?私は興味がある。 –

+0

文字列が同じ部分を持つ場合にキャプチャグループを使用できることがわかりました。 '([0-9A-F] {4}) - \ 1'は00AA-00AAと一致します。私は同じことが表現自体に当てはまるかどうかを知りたいだけでした。コメントしてくれてありがとう! –

答えて

1

あなたは

([0-9A-F]{4}-?){2} 

または

(-?[0-9A-F]{4}){2} 

のような式を書くことができます。しかし、前者はまた-00AA-10F2-00AA10F2にマッチする00AA-10F2-00AA10F2-、後者のような文字列にマッチします。正規表現[0-9A-F]{4}-[0-9A-F]{4}を書く方が簡単です。

また
std::string subexpression("[0-9A-F]{4}"); 
std::regex regularExpression(subexpression + "-" + subexpression); 

、デフォルトのECMAScriptモード以外のモードは、特定の部分式が繰り返されることを可能にする正規表現の構文を提供していますが、C++の実装で他のモードをサポートする場合があります:あなたはしかし、のようなプレーンなC++のトリックを使用することができ

欠けている。

+0

ありがとうございました! –

関連する問題