繁体   English   中英

正则表达式空白与。 日食

[英]RegEx Whitespace Vs. Eclipse

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

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

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

谢谢


新增

好吧,我明白了,但是,尽管我将' \\s '用于任何空格字符,并且正如我所说,Regex Buddy也可以识别它,如果我使用' \\s ',则在Regex Buddy中无法识别,因此测试失败,但是在月食中它让我继续前进,即使它什么都不匹配... = /还是没有得到任何东西?

'\\'标识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());

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

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

如果要单独准备将正则表达式粘贴到Java代码中,请在RegexBuddy顶部的工具栏中选择Java风格。 然后单击“复制”按钮,然后选择“将正则表达式复制为Java字符串”。 然后,RegexBuddy将把您的正则表达式复制到正确设置为Java字符串格式的剪贴板中。 您的正则表达式将被复制为:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM