作为正则表达式的初学者,我相信我会问一些太简单但无论如何都问,希望它不会打扰你帮助我。
假设我有一条像"你好'cool1'这个词!酷2'"我想获取第一个引号的文本(它是没有"的"cool1")
我的模式应该是什么? 当使用Matcher时,我如何保证它将保留第一个报价而不是第二个报价?
(请仅使用正则表达式提出解决方案。
使用以下正则表达式:
'([^']*)'
使用方法如下:(异构酮)
Pattern pattern = Pattern.compile("'([^']*)'");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
或者,如果您知道带引号的字符串中没有换行符,则这样做:
'(.*?)'
使用 Matcher 时,如何保证它将保留第一个引号而不是第二个引号?
它将首先找到第一个带引号的字符串,因为它从左到右开始搜索。如果你要求它进行下一场比赛,它会给你第二个带引号的字符串。
如果你想在没有'
的情况下找到第一个引号的文本,你可以/应该使用前瞻和后视机制,如
(?<=').*?(?=')
例如
System.out.println("hello 'cool1' word! 'cool2'".replaceFirst("(?<=').*?(?=')", "ABC"));
//out -> hello 'ABC' word! 'cool2'
更多信息
您可以简单地将字符串拆分在引号上并得到第二块(它将在第一个和第二个引号之间)。
如果您坚持使用正则表达式,请尝试以下操作:
/^.*?'(.*?)'/
确保它设置为多行,除非您知道输入中永远不会有换行符。然后,从结果中获取子模式,这将是您的字符串。
要支持双引号,请执行以下操作:
/^.*?(['"])(.*?)1/
然后获取子模式 2。