我的目的是使用String :: split()方法找到所有“标记”和引用的字符串:
(("[\w\s]*")|(\w*))*
输入文字:
this "a test" abd "and more"
它总是返回false。
另外,我如何“引用”它以便我可以在源代码中使用它?
答案 0 :(得分:1)
String.split
使用匹配作为分隔符进行拆分,即返回不匹配的所有内容。如果您想要返回您匹配的内容,则应使用Matcher.find
。
此外,\\w*
匹配长度为0的字符串,您可能希望避免这种情况。使用+
匹配1个或更多。
你也有一些不必要的括号而外部*
不应该存在 - 正则表达式的其余部分已经匹配单个标记中的所有字符,并且多个标记应该可以匹配正则表达式匹配的多个调用(所以说"其中任何一些"都没有意义。)
Matcher m = Pattern.compile("\"[\\w\\s]*\"|\\w+").matcher("this \"a test\" abd \"and more\"");
while (m.find())
System.out.println(m.group());
以上版画:
this
"a test"
abd
"and more"
要删除引号,您可以更新正则表达式以使用look-around,这将检查"
是否存在,但实际上并未匹配它们<\ n < / p>
"(?<=\")\\w[\\w\\s]*(?=\")|\\w+"
要了解如何逃避事情,您需要牢记不同的层面。首先是Java本身,其中"
会开始或结束字符串,因此如果您希望\
字符出现,则需要使用"
进行转义一个字符串。然后是正则表达式代码,它需要\w
和\s
,但Java不允许\
在没有转义的情况下使用\\w
,因此\\s
ERROR in /PATH_REMOVED/$$_gendir/app/dashboard-chart/dashboard-chart.component.ngfactory.ts (49,9): Supplied parameters do not match any signature of call target.
ng serve --aot --prod
1}}和import { Component, OnInit, OnChanges, Input, ViewChild, ElementRef, ViewEncapsulation } from '@angular/core';
@Component({
selector: 'dashboard-chart',
templateUrl: './dashboard-chart.component.html',
styleUrls: ['./dashboard-chart.component.css'],
encapsulation: ViewEncapsulation.None
})
export class DashboardChartComponent implements OnInit, OnChanges {
@ViewChild('chart') chartContainer: ElementRef;
@Input() data: any[];
constructor() { }
ngOnInit() {
}
ngOnChanges() {
}
}
。