「\」は Java のエスケープ文字を識別するため、単独で使用する場合はエスケープする必要があります。(\t はタブ、\n は改行など) エスケープするには、2 ではなく 1 '\' を追加する必要があります。
トリックを実行するJavaコードを次に示します。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Assert;
import org.junit.Test;
public class RegexTest {
@Test
public void testPatternWithWhiteSpace(){
Pattern pattern = Pattern.compile("Powered\\s*[bB]y.*MyBB");
Matcher matcher = pattern.matcher("Powered By MyBB");
Assert.assertTrue(matcher.matches());
matcher = pattern.matcher("Powered_By MyBB");
Assert.assertFalse(matcher.matches());
}
}
空白の「トークン」(\s) を文字セット ([]) に入れる必要はありません。
\s は空白です。
正規表現が実際に記述されているため、Regex buddy には入力が必要です。Eclipse/ソース コードのリテラル文字列式はエスケープする必要があります。プロパティ ファイルなどからパターンを読み取る場合は、エスケープする必要はありません。
私が言ったように、Regex Buddy もそれをそのように認識し、\s を使用すると Regex Buddy で認識されないため、テストは失敗します
私はあなたが失敗したところにある日食を意味していると思いますか? これらの行をテストに追加するだけで、もう少し説明がつくかもしれません:
matcher = pattern.matcher("Powered\t\n\r By MyBB");
Assert.assertTrue(matcher.matches());
matcher = pattern.matcher("Powered\t\n\r ,By MyBB");
Assert.assertFalse(matcher.matches());