22

/スラッシュまたはバックスラッシュ\を特定の文字列に一致させたい場合 。例:
1。2 Hi/Hello/Bye/
. 3. 4.指定された文字列では、または が含まれていないため、最後のレコードのみを一致させる必要があります。 Hi\Hello\Bye\
Hi\Hello/Bye\
HiHelloBye
/\

私が使用しているもの

if (strFile.matches(".*//.*"))
{
    //String Matches.
}
else
{
    //Does not match.
}

これはスラッシュに/のみ一致します。両方のスラッシュ(条件用)の正規表現の書き方がわかりませんOR

4

4 に答える 4

37

一致させようとしている「キャラクター」は次のようになります。

"[/\\\\]"

最初に文字列に対してバックスラッシュを複製し、次に正規表現に対して再度複製します。

文字列をエスケープするためにバックスラッシュも使用する言語でバックスラッシュを使用する必要がある場合、これはおそらく最も厄介な正規表現です。

Javaコンパイラは"\\\\"、ソースコード内の文字列を確認し、実際にそれをに変換します(エスケープ文字として"\\"使用されるため)。\

次に、正規表現はそれを認識し、エスケープ文字として"\\"も使用\されるため、単一の\文字として扱います。

Liu Yanがコメントで指摘しているように、次のいずれかを使用することで、 1つのレベルのバックスラッシュ(正規表現のもの)を取り除くことができます。

".*[/\\x5c].*"
".*[/\\u005c].*"

それはそれを少し読みやすくするかもしれません。

すべての削減が完了したら、両方のスラッシュで構成される文字クラスを指定し、問題の文字がどちらかに一致する場合はtrueを返します。

次のコードは、これが実際に動作していることを示しています。

public class testprog {
    public static void checkString (String s) {
        boolean yes = s.matches(".*[/\\\\].*");
        System.out.println ("'" + s + "': " + yes);
    }

    public static void main (String s[]) {
        checkString ("Hi/Hello/Bye/");
        checkString ("Hi\\Hello\\Bye\\");
        checkString ("Hi\\Hello/Bye\\");
        checkString ("HiHelloBye");
    }
}

そしてそれは出力します:

    'Hi / Hello / Bye /':true
    'Hi \ Hello \ Bye \':true
    'Hi \ Hello / Bye \':true
    'HiHelloBye':false
于 2012-08-03T04:59:54.480 に答える
4

あなたが欲しい:

strFile.matches(".*[/\\\\].*")

具体的には、に置き換え//ます[/\\\\]

必要なのはスラッシュを1つだけですが、バックスラッシュは4つ必要です。これは、1つは文字列内のエスケープであり、2つは正規表現のエスケープであるため4つ必要です。

于 2012-08-03T05:01:26.843 に答える
2

これを使って...

[ ]OR機能を提供します。

Pattern pat = Pattern.compile("[/\\\\]");
Matcher m = pat.matcher("Hi/Hello/Bye/");

while (m.find()){

    System.out.println(m.group());
}
于 2012-08-03T05:09:41.370 に答える
2

交互に使用: strFile.matches(".*(/|\\\\).*")スラッシュまたはバックスラッシュのいずれかに一致します。Java正規表現のドキュメントを確認することをお勧めします。

于 2012-08-03T05:03:40.367 に答える