'\' 标识 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());
}
}
您不必将空格“标记”(\s) 放在字符集 ([]) 中。
你是对的, \s 是任何空格。
正则表达式伙伴需要输入,因为正则表达式实际上是编写的,需要转义 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());