Java:如何获取第一个引号文本



作为正则表达式的初学者,我相信我会问一些太简单但无论如何都问,希望它不会打扰你帮助我。

假设我有一条像"你好'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。

相关内容

最新更新