次の Java コードがあります。
String data = "MaxL-450";
if(!data.matches("MaxL\\-*"))
throw new IllegalArgumentException("Did not match.");
実行すると、明らかに正規表現が私の文字列と一致しないため、例外がスローされdata
ます。私の正規表現に何か問題がありますか、それともここで何か他のことが起こっていますか? 前もって感謝します。
*
前の文字が 0 回以上出現することを意味します。"MaxL-[0-9]*"
ダッシュの後に数字を一致させたいと仮定すると、 のようなものが必要です。
または、 を使用することもできます"MaxL-\\d*"
。スラッシュ自体をエスケープする必要があるため、Java では 2 つのスラッシュが必要であることに注意してください。個人的に[0-9]
は、Java で明示的な文字クラス (つまり ) を使用するのが好きです。これは、正規表現が必然的に長く複雑になるにつれて読みやすくなるためです。
編集: また、Dave Newton が指摘しているように、ダッシュは文字クラス内にないため、ダッシュの前のエスケープ スラッシュは必要ありません。
ハイフンの後に任意の文字を探している場合:
if(!data.matches("MaxL\\-.*"))
throw new IllegalArgumentException("Did not match.");