1

次のコード スニペットを使用しているときに 1 つの問題があります。

 String regexString=regexPair.get(paramName);

 Pattern p = Pattern.compile(regexString);
 Matcher m = p.matcher(paramMap.get(paramName)[0]);
 status = m.matches();

それはfalseを返します

regexPair は hashmap で、regexPair.get(paramName) は

"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"

私が置き換わる間

String regexString="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"

その後、正常に動作します

paramMap.get(paramName)[0]agsd@gmail.com を返します。

なぜこれが起こっているのかわかりません。助けてください。

4

1 に答える 1

1

regexPair.get(paramName)それがあなたが与えた文字列であることをどうやって知っていますか?printlnそれはいくつかの呼び出しの結果ですか?

引用は完全に同じではないと思います。regexPair.get(paramName)実際に含まれているのに、'\\'その後に別のバックスラッシュが続く場合'\\'(つまり、2つの実際のバックスラッシュが連続している場合)、置換には含まれているだけ"\\"(1つのバックスラッシュ)である可能性があります。"(\\."文字列の長さは実際にはわずか3文字であることに注意してください。

于 2012-07-09T16:42:00.097 に答える