回答:
正規表現で特別な意味を持つドットまたはその他の文字を通常の文字にしたい場合は、バックスラッシュでエスケープする必要があります。Javaの正規表現は通常のJava文字列なので、バックスラッシュ自体をエスケープする必要があるため、2つのバックスラッシュが必要です。\\.
他のメンバーから提案された解決策は私にはうまくいきません。
しかし、私はこれを見つけました:
Java正規表現でドットをエスケープするには [.]
\\.
私のために動作しませんでした:\.
その訴え.
、エスケープする必要はありません\\.
、それはそれだったと思う製\.
の代わりに.
、\\\.
およびエラー投げビルダー、[.]
働いていた唯一のものでした。
\\.
、文字列リテラル内\.
では、正規表現が任意の文字のマッチャーではなくリテラルドットとしてドットを表示するために必要な正規表現が提供されます。
Perlスタイルの正規表現(Java正規表現エンジンは多かれ少なかれ基づいている)は、次の文字を特殊文字として扱います。
.^$|*+?()[{\
文字クラス以外の特別な意味を持つ
]^-\
文字クラスの内部では特別な意味があります([...]
)。
したがって、コンテキストに応じてこれらの(そしてそれらのみの)シンボルをエスケープする必要があります(または、文字クラスの場合は、誤って解釈されない位置に配置します)。
不必要に他の文字をエスケープすることもできますが、一部の正規表現エンジンはこれを構文エラーとして扱い\_
ます。たとえば、.NETでエラーが発生します。
たとえば、Perlでは\<
リテラルとして解釈されます<
が、egrep
「単語の境界」を意味します。
書き込みだから、-?\d+\.\d+\$
試合に1.50$
、-2.00$
などと[(){}[\]]
かっこ/括弧/括弧のすべての種類に一致する文字クラスについて。
ユーザー入力文字列を正規表現に安全な形式に変換する必要がある場合は、を使用してくださいjava.util.regex.Pattern.quote
。
特殊文字をバックスラッシュでエスケープします。\.
、\*
、\+
、\\d
、とのようにします。よくわからない場合は、特殊文字であるかどうかに関係なく、アルファベット以外の文字をエスケープできます。詳細については、javadocのjava.util.regex.Patternを参照してください。
ここに、直接コピーして貼り付けることができるコードがあります:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
そして、誤って「。」の前後にスペースが残っているとどうなるでしょうか。そのような場合?これらのスペースも考慮することが常にベストプラクティスです。
String imageName = "picture1 . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
ここで、\\ s *はスペースを考慮して、必要な分割文字列のみを提供するためのものです。
「。*」で終わる文字列に一致させたいので、次のように使用する必要がありました。
"^.*\\.\\*$"
あなたがそれについて考えるならば、ちょっとばかげています:Dそれが意味することをここに示します。文字列の先頭には、0個以上の任意の文字の後にドット「。」を続けることができます。文字列の最後に星(*)が続きます。
これが誰かにとって重宝すると思います。Fabianにバックスラッシュを付けてくれてありがとう。
"\\.\\*$"
。関係がない場合は、文字列の先頭を照合する必要はありません。