Java模式的使用

标签 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() 都为 true。但是 matcher.find() 应该为 false,matcher2.find() 应该为 true。

我希望匹配器对于 "WhiteSpace" 为 true,对于 "WhiteSpace" 为 false(两个空格)
我希望 matcher2 对于 :"WhiteSpace" 为 true。

<小时/>

我想做的事情是;
我有一个字符串“两个空格”
下面两个 if 语句都为 true。 matcher 应该为 false。 matcher2 应该为 true。

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
}

最佳答案

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

因此,如果后面没有另一个空格,则只能匹配行开头的空格的模式可能看起来像

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

这可以通过空格适应任何数字

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

关于Java模式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474040/

相关文章:

java - 如何配对在同一图像的多个 docker 容器内运行的嵌入式 Hazelcast

Java "? :"运算符?

JavaScript:正则表达式获取 ";;;"之间的字符串

java - 匹配句子java中列表/数组的任何单词

javascript - 有没有办法在自定义匹配器中使用 Jasmine 默认匹配器?

java - Apache 菲利克斯 : Delete JAR from Load Directory without Container Shutdown

javascript - 如何使 Selenium 忽略/跳过或覆盖 window.close()

python - 如何使用 difflib.SequenceMatcher 获得多个匹配项?

正则表达式查找在字符串中使用超过 3 次但不连续使用的任何字符

java正则表达式从较大的字符串中排除特定的字符串