无法识别Java正则表达式空白
我试图使用“java.util.regex.Pattern”从文本文件捕获赋值操作。我一直很沮丧地试图修复我的正则表达式,以便真正识别我要找的东西。我已经尽可能地简化了这个问题,并且发现了一个关于拾取空白的问题 ,并揭示了处理空白字符集的问题,但没有回答以下问题:无法识别Java正则表达式空白,java,regex,whitespace,Java,Regex,Whitespace,我试图使用“java.util.regex.Pattern”从文本文件捕获赋值操作。我一直很沮丧地试图修复我的正则表达式,以便真正识别我要找的东西。我已经尽可能地简化了这个问题,并且发现了一个关于拾取空白的问题 ,并揭示了处理空白字符集的问题,但没有回答以下问题: Pattern p = Pattern.compile("adfa ="); Scanner sc = new Scanner("adfa ="); if(sc.hasNext(p)) { String s = sc.nex
Pattern p = Pattern.compile("adfa =");
Scanner sc = new Scanner("adfa =");
if(sc.hasNext(p))
{
String s = sc.next(p);
System.out.println(">" + s + "<");
}
else
System.out.println(":(");
将拾取以下字符串:
"adfa="
但不是:
"adfa ="
只需进行以下更改:
Pattern p = Pattern.compile("adfa=");
Scanner sc = new Scanner("adfa=");
一切按计划进行!有人能解释出哪里出了问题吗?从文档中可以看出:-
如果下一个完整标记与指定模式匹配,则返回true。
一个完整的令牌由匹配
分隔符模式
现在,由于扫描器的默认分隔符模式是\p{javaWhitespace}+
。使用以下方法查找:-
Scanner sc = new Scanner("abdc =");
System.out.println(sc.delimiter()); // Prints \p{javaWhitespace}+
因此,当您的扫描仪
遇到字符串中的空白时。它假定标记
已结束。因此停止,并尝试将读取标记与您的模式匹配。当然它失败了,因此sc.hasNext(p)
returnfalse
。这就是问题所在。从文档中可以看出:-
如果下一个完整标记与指定模式匹配,则返回true。
一个完整的令牌由匹配
分隔符模式
现在,由于扫描器的默认分隔符模式是\p{javaWhitespace}+
。使用以下方法查找:-
Scanner sc = new Scanner("abdc =");
System.out.println(sc.delimiter()); // Prints \p{javaWhitespace}+
因此,当您的扫描仪
遇到字符串中的空白时。它假定标记
已结束。因此停止,并尝试将读取标记与您的模式匹配。当然它失败了,因此sc.hasNext(p)
returnfalse
。这就是问题所在。如果下一个完整的令牌与指定的模式匹配,则From返回true。完整的标记由与分隔符模式匹配的输入作为前缀和后缀
在Scanner中,withespace是默认的分隔符,因此在您的示例中,Scanner尝试将标记“adfa”与正则表达式匹配,而正则表达式不匹配。如果将分隔符更改为其他内容,如换行符:
sc.useDelimiter("\n");
你的正则表达式应该有用
编辑:我的回答有点晚了 如果下一个完整的标记与指定的模式匹配,From将返回true。完整的标记由与分隔符模式匹配的输入作为前缀和后缀
在Scanner中,withespace是默认的分隔符,因此在您的示例中,Scanner尝试将标记“adfa”与正则表达式匹配,而正则表达式不匹配。如果将分隔符更改为其他内容,如换行符:
sc.useDelimiter("\n");
你的正则表达式应该有用
编辑:我的回答有点晚了 编辑:请阅读默认值实际上是任何空格。谢谢不确定我是如何设法不读取它的,并假定分隔符是“\n”或EOF。@Daeden。。尝试打印sc.delimiter()
的值。您将得到\p{javaWhitespace}+
。我希望这能说明问题。编辑:请阅读默认值实际上是任何空格。谢谢不确定我是如何设法不读取它的,并假定分隔符是“\n”或EOF。@Daeden。。尝试打印sc.delimiter()
的值。您将得到\p{javaWhitespace}+
。我希望这能说明问题。尽管如此,我还是感谢你的回答!尽管如此,我还是感谢你的回应!