
[英]RegEx: Using /i vs. /g (/g replaces whitespace but /i doesn't)
[英]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.