m}{n}(「ちょうどn回」2回)の仕組みは?
質問
というわけで、どうにかこうにか(遊んでいるうちに)、以下のような正規表現があることに気がつきました。
\d{1}{2}
.
論理的には、私にとって、それは意味するはずです。
(A digit exactly once) exactly twice, すなわち、数字がちょうど2回ある。
しかし、実際には、これは単に "数字がちょうど一回" を意味するように見えます(したがって
{2}
).
String regex = "^\\d{1}{2}$"; // ^$ to make those not familiar with 'matches' happy
System.out.println("1".matches(regex)); // true
System.out.println("12".matches(regex)); // false
同様の結果は
{n}{m,n}
などを使っても同じような結果が得られます。
なぜこのようなことが起こるのでしょうか。regex / Java ドキュメントのどこかに明示されているのでしょうか、それとも Java 開発者がその場で決めただけなのでしょうか、それともバグなのでしょうか?
あるいは、実際には無視されず、まったく別のことを意味するのでしょうか?
あまり重要ではありませんが、正規表現の動作は全体的なものではありません。 ルビュラー は私が期待したとおりの動作をします。
注 - タイトルは主に、それがどのように動作するのか(なぜではない)を知りたいユーザーのために検索性を高めるためのものです。
どのように解決するのですか?
RegexBuddyでJavaの正規表現構文を使って正規表現を入力すると、以下のようなメッセージが表示されます。
量詞の前には、繰り返し使えるトークン "{2}" を置く必要があります。
グループ化を明示的に使用するように正規表現を変更する
^(\d{1}){2}
に変更すると、このエラーは解決され、期待通りに動作します。
私は、java regex エンジンが単にエラー/式を無視し、これまでにコンパイルされたもので動作すると仮定しています。
編集
への参照は IEEE-標準 で piet.tの回答 は、その仮定を支持しているように思えます。
編集2 (@fncomp に感謝)
完全を期すために、通常は
(?:)
を使い、グループの捕捉を回避します。完全な正規表現は次のようになります。
^(?:\d{1}){2}
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
SocketException java.netの4つの例外解決策。
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】Apache Camelとは一体何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Javaジェネリックを1つの記事で
-
Junitのユニットテストはjava.lang.Testを報告します。
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Java基礎編 - オブジェクト指向
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
htmlとwordの相互変換の実装(画像あり)