«\» идентифицирует escape-символ в java, поэтому вам нужно экранировать его, если вы хотите использовать его самостоятельно. (\ t это табуляция, \ n это перевод строки и т. д.)
Чтобы избежать этого, вам нужно добавить 1 '\' вместо 2.
Вот некоторый 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());
}
}
Вам не нужно помещать пробел 'token' (\ s) в набор символов ([]).
вы правы, \ s - любые пробелы.
Regex buddy нужен ввод, поскольку регулярное выражение действительно написано, буквенное строковое выражение в eclipse / source code должно быть экранировано
Если вы прочитаете шаблон, скажем, из файла свойств, вам не нужно будет экранировать его.
как я уже сказал, 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());