我正在尝试使用正则表达式来匹配空格,到目前为止我正在这样做:
Powered[\s]*[bB]y.*MyBB
我知道它应该可行,因为我已经尝试使用Regex Buddy并且它说它确实有效但是当我尝试使用Eclipse运行它时会标记一个错误,说它不是一个有效的转义序列并且它会自动添加2'\'渲染正则表达式无用....有人可以告诉我该怎么做?我到目前为止最终使用了一个点而不是\ s但我真正需要的是\ s ...
由于
加:
嗯,我理解但是,我虽然'\s
'用于任何空格字符,正如我所说,Regex Buddy也认同它,如果我使用'\s
'它是在Regex Buddy中没有被识别,因此测试失败,但在eclipse中它允许我继续,即使它没有匹配...... = /或者我没有得到什么?
答案 0 :(得分:3)
'\'标识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());
答案 1 :(得分:1)
在Eclipse中使用正则表达式究竟是什么意思?您是在尝试在IDE中进行搜索和替换,还是在尝试在Java代码中使用正则表达式?
如果要在Java代码中使用正则表达式,请在RegexBuddy的“使用”选项卡上生成Java源代码段,并将其粘贴到代码中。
如果您希望单独使用正则表达式粘贴到Java代码中,请在RegexBuddy顶部的工具栏中选择Java flavor。然后单击“复制”按钮,并选择“将正则表达式复制为Java字符串”。然后,RegexBuddy会将您的正则表达式复制到格式化为Java字符串的剪贴板。您的正则表达式将被复制为:
"Powered[\\s]*[bB]y.*MyBB"
使用Java字符串文字来存储正则表达式时,额外的反斜杠是必不可少的。
P.S。:您可以使用\ s代替[\ s]。保存两次击键。