为什么这个java正则表达式返回false?
我的目的是使用String::split()方法查找所有“标记”和带引号的字符串: 输入文本:为什么这个java正则表达式返回false?,java,regex,Java,Regex,我的目的是使用String::split()方法查找所有“标记”和带引号的字符串: 输入文本: this "a test" abd "and more" 它总是返回false 另外,如何“引用”它以便在源代码中使用它?String.split使用匹配项作为分隔符进行拆分,即返回所有不匹配的内容。如果要返回匹配的内容,应该使用 另外,\\w*匹配长度为0的字符串,您可能希望避免使用该字符串。使用+匹配1个或多个 您还有一些不必要的括号,外部的*不应该在那里-正则表达式的其余部分已经匹配了单个标
this "a test" abd "and more"
它总是返回false
另外,如何“引用”它以便在源代码中使用它?
String.split
使用匹配项作为分隔符进行拆分,即返回所有不匹配的内容。如果要返回匹配的内容,应该使用
另外,\\w*
匹配长度为0的字符串,您可能希望避免使用该字符串。使用+
匹配1个或多个
您还有一些不必要的括号,外部的*
不应该在那里-正则表达式的其余部分已经匹配了单个标记中的所有字符,多个标记应该在正则表达式匹配的多个调用中进行匹配(所以说“任意数量”没有意义)
上述印刷品:
这个
“测试”
阿布德
“还有更多”
要删除引号,可以更新要使用的正则表达式,这将检查“
”是否存在,但实际上并不匹配:
"(?<=\")\\w[\\w\\s]*(?=\")|\\w+"
”(?在Java中,调用静态函数不需要双冒号::XD提醒人们split来自String的缩写是什么?String#split?String.split
返回String[]
,所以我不确定它是如何返回false的。你能用实际输出显示代码和预期输出吗?我会说是的,通常使用的是#。(我自己也使用它)'如何“引用”它'你是指使用转义符吗?你需要(\“[\\w\\s]*\”)(\\w*)*
我相信一些IDE在粘贴时会自动执行此操作(即IntelliJ)感谢您给出了一个漂亮、完整、有效且富有启发性的答案:)
Matcher m = Pattern.compile("\"[\\w\\s]*\"|\\w+").matcher("this \"a test\" abd \"and more\"");
while (m.find())
System.out.println(m.group());
"(?<=\")\\w[\\w\\s]*(?=\")|\\w+"