RegEx Whitespace比。日食

时间:2008-12-30 13:44:45

标签: regex eclipse regexbuddy

我正在尝试使用正则表达式来匹配空格,到目前为止我正在这样做:

Powered[\s]*[bB]y.*MyBB

我知道它应该可行,因为我已经尝试使用Regex Buddy并且它说它确实有效但是当我尝试使用Eclipse运行它时会标记一个错误,说它不是一个有效的转义序列并且它会自动添加2'\'渲染正则表达式无用....有人可以告诉我该怎么做?我到目前为止最终使用了一个点而不是\ s但我真正需要的是\ s ...

由于


嗯,我理解但是,我虽然'\s'用于任何空格字符,正如我所说,Regex Buddy也认同它,如果我使用'\s'它是在Regex Buddy中没有被识别,因此测试失败,但在eclipse中它允许我继续,即使它没有匹配...... = /或者我没有得到什么?

2 个答案:

答案 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]。保存两次击键。