English 中文(简体)
RegEx空白区与Eclipse
原标题:
  • 时间:2008-12-30 13:44:45
  •  标签:

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

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

我知道它应该有效,因为我在Regex Buddy中尝试过,它说它有效,但当我尝试在Eclipse中运行它时,它会标记一个错误,说它不是一个有效的转义序列,它会自动添加2´´,使Regex变得无用。。。。有人能告诉我该怎么办吗?到目前为止,我最终使用了一个点而不是s,但我真正需要的是s。。。

谢谢


添加

好吧,我理解,但是,我认为s用于任何空白字符,正如我所说,Regex Buddy也会识别它,如果我使用s,它在Regex Buddi中不会被识别,因此测试失败,但在eclipse中,它允许我继续,即使它什么都不匹配…=/还是我没有得到什么?

最佳回答

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

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

如果您想让正则表达式单独粘贴到Java代码中,请在RegexBuddy顶部的工具栏中选择Java风格。然后单击Copy(复制)按钮,然后选择Copy Regex as Java String(将Regex复制为Java字符串)。然后,RegexBuddy会将您的正则表达式复制到剪贴板,并以Java字符串的格式进行格式化。您的正则表达式将被复制为:

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

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

附言:你可以用S代替[S]。保存两次击键。

问题回答

A identifies an escape character in java, so you need to escape it if you want to use it on it s own. ( is tab, is newline etc.) To escape it, you need to add 1 instead of 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是任何空格。

Regex buddy needs an input as the regular expression is actually written, a literal string expression in eclipse/source code needs to be escaped. If you would read the pattern from say a properties file, you would not need to escape it.

as I said, Regex Buddy also recognizes it as such, and if I use s it is not recognized in Regex Buddy hence the test fails

i m assuming you mean eclipse there where it fails? Just add these lines to the test, maybe that explains it a bit more:

        matcher = pattern.matcher("Powered	

 By     MyBB");
        Assert.assertTrue(matcher.matches());
        matcher = pattern.matcher("Powered	

 ,By     MyBB");
        Assert.assertFalse(matcher.matches());




相关问题
热门标签