【问题标题】:RegEx Whitespace Vs. Eclipse正则表达式空格与。蚀
【发布时间】:2008-12-30 13:44:45
【问题描述】:

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

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

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

谢谢


已添加

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

【问题讨论】:

  • “Eclipse”是一个工具。您是否使用 Java、JavaScript、Python 或其他语言进行编码?还是在 Eclipse 的 Find 工具中?
  • Eclipse 是我用 JAVA 编写的开发工具

标签: regex eclipse regexbuddy


【解决方案1】:

'\' 标识 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 是任何空格。

Regex buddy 需要输入,因为正则表达式实际上是编写的,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());

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2020-04-06
      • 2011-09-09
      • 2020-08-06
      相关资源
      最近更新 更多