Java模式用法

时间:2016-11-07 20:30:53

标签: java regex matcher

情景:

Pattern whitespace = Pattern.compile("^\\s");
matcher = whitespace.matcher("  WhiteSpace");

Pattern whitespace2 = Pattern.compile("^\\s\\s");
matcher2 = whitespace2.matcher("  WhiteSpace");

我试图在一行的开头获得空格。我想得到准确数量的空格匹配器。我的字符串是" WhiteSpace" 问题是matchermatcher2都适用于此字符串。

我想要的是:
只获得1个空格的模式,但此模式不起作用 2个白色空格字符串。在下面的方案中,matcher.find()matcher2.find()都是正确的。但是matcher.find()应该是假的,matcher2.find()应该是真的。

我希望匹配器对" WhiteSpace"为真,对" WhiteSpace"(两个空格)为假 我希望matcher2适用于:" WhiteSpace"

我想做的是;
我有一个字符串" two whitespaces" 以下两个if语句都是真的。 matcher应该是假的。 matcher2应该是真的。

Pattern whitespace = Pattern.compile("^\\s");
matcher = whitespace.matcher("  two whitespaces");

Pattern whitespace2 = Pattern.compile("^\\s\\s");
matcher2 = whitespace2.matcher("  two whitespaces");

if(matcher.find()==true){
    //XXXXXXXXXXX
} else if(matcher2.find()==true){
    //YYYYYYYYYYY
}

2 个答案:

答案 0 :(得分:1)

如果你想确保在一个空格之后没有其他空格,但你实际上并不想要包含你将在匹配中测试的第二个字符(无论它是否是空格),你可以使用negative lookahead机制(?!..)

如果模式看起来没有其他空格,那么只能在行首处匹配空格的模式

Pattern whitespace = Pattern.compile("^\\s(?!\\s)");

这可以适用于空格的任何数字

Pattern whitespace = Pattern.compile("^\\s{3}(?!\\s)");

答案 1 :(得分:1)

这里的模式可能过度*。使用Character.isWhitespace并获得更简单的代码:

String in = "   your input here";
int wsPrefix=0;
for ( ; wsPrefix < in.length() && Character.isWhitespace(in.charAt(wsPrefix)) ;
      wsPrefix++ ) {}
System.out.println("wsPrefix = " + wsPrefix);

*据说:

  

&#34;有些人在面对问题时会思考   “我知道,我会使用正则表达式。”现在他们有两个问题。    - Jaimie Zawinski, 1997