Java 模式匹配器不适用于空白

Java 模式匹配器不适用于空白,java,regex,Java,Regex,我正在尝试使用模式匹配器java搜索下面的单词 要在文档中搜索的单词: (peak: somevalue) [ 代码: 但是没有得到预期的结果 要使用该模式获取“somevalue”的值,请指导我。您需要在冒号和(.*)的“任何内容捕获”之间\s。此代码为您提供了正确的结果: String s="(peak: somevalue) ["; Matcher m= Pattern.compile("\\(peak:(.*?)\\)\\s\\[").matcher(s);

我正在尝试使用模式匹配器java搜索下面的单词

要在文档中搜索的单词:

 (peak: somevalue) [
代码:

但是没有得到预期的结果


要使用该模式获取“somevalue”的值,请指导我。

您需要在冒号和(.*)的“任何内容捕获”之间\s。

此代码为您提供了正确的结果:

    String s="(peak: somevalue) [";
    Matcher m= Pattern.compile("\\(peak:(.*?)\\)\\s\\[").matcher(s);

    m.find();
    System.out.println(m.group(1));

您需要在正则表达式末尾转义
[
,因为它也是用于创建
[…]

您可以在组1的匹配中,在
(.*?
之前添加
\\s?
,以便在
峰值:
之后不包含空格

所以你的代码看起来像

Matcher m =  Pattern.compile("\\(peak:\\s?(.*?)\\)\\s\\[").matcher(currLine);
if(m.find())
    System.out.println(m.group(1));
//                            ^^^ group 1 will contain match from `(.*?)`
顺便说一句,您应该使用您试图分析的语言的解析器来代替正则表达式。如果您使用
*?
,正则表达式可能会给您带来许多问题,例如假阳性匹配,因为点
可以接受任何字符,所以在您的大小写模式中
“\\(峰值:\\s?(*?\)\\s\\\[”
将接受任何以
(peak:
开头,以
结尾的字符串[
类似于
(peak:whatever)({bar}{}(blah)[

要解决这类问题,您需要更具体地说明什么类型的字符应该被接受为
,无论什么
。其中一个想法是让它接受不是
的字符,以便您可以尝试使用

Pattern.compile("\\(peak:\\s?([^)]*?)\\)\\s\\[")
//                            ^^^^ means any character except `)`

您可能还想注释mask“[”,因为它是一个regexp部分这就是问题所在
\(peak:(.*)\)\s[他将想要捕获的值放在双引号中。我没有看到前导空格。您是对的,他说了他想要捕获的内容。(peak:(.*))[-没有按预期工作,我需要搜索(peak:somevalue)[但是使用上面的代码,它还搜索(peak:somevalue)
asdbsaddb[这会给出错误的结果,是否可以只搜索模式(peak:somevalue)[@user3387870检查我的更新答案。如果它不是你想要的,那么编辑你的问题,包括一些输入示例,并解释哪些值应该匹配,哪些不匹配。(如果你编辑你的问题,请告诉我。)我的搜索值如下:(峰值:360)[但我从不同的线得到的结果也有这种模式线1:(峰值:360)[线2:(峰值:480)foobarsomewordsintegers所以我有两个results@user3387870对不起,我不确定你的意思。考虑用输入和你想要得到的结果的例子来编辑你的问题(哪些元素应该匹配,哪些不匹配,为什么)。我需要从EX中得到值“360”:(峰值:360)[在某些线中,但我也有相同的模式(峰:520)FooBar。[,在我的结果中,我得到两个结果,我想过滤掉确切的模式(峰值:xxx)[
Matcher m =  Pattern.compile("\\(peak:\\s?(.*?)\\)\\s\\[").matcher(currLine);
if(m.find())
    System.out.println(m.group(1));
//                            ^^^ group 1 will contain match from `(.*?)`
Pattern.compile("\\(peak:\\s?([^)]*?)\\)\\s\\[")
//                            ^^^^ means any character except `)`