0

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

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

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

谢谢


补充

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

4

2 回答 2

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());
于 2008-12-30T13:58:23.007 回答
1

在 Eclipse 中使用正则表达式到底是什么意思?您是要在 IDE 中进行搜索和替换,还是要在 Java 代码中使用正则表达式?

如果您想在 Java 代码中使用正则表达式,请在 RegexBuddy 的“使用”选项卡上生成 Java 源代码片段,然后将其粘贴到您的代码中。

如果您想让正则表达式单独准备好粘贴到 Java 代码中,请在 RegexBuddy 顶部的工具栏中选择 Java 风格。然后单击复制按钮,并选择将正则表达式复制为 Java 字符串。然后,RegexBuddy 会将您的正则表达式复制到剪贴板,并将其正确格式化为 Java 字符串。您的正则表达式将被复制为:

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

使用 Java 字符串文字存储正则表达式时,额外的反斜杠是必不可少的。

PS:您可以使用 \s 代替 [\s]。节省两次击键。

于 2008-12-31T07:36:48.287 回答