gpt4 book ai didi

java - 如何捕获这个带有引号的组?

转载 作者:行者123 更新时间:2023-11-30 06:09:49 25 4
gpt4 key购买 nike

    String content = "$.test(\"I am do'in testing\") ";
Matcher matcher =
Pattern.compile("\\$.test.*?(.*?[\"'](.*?)[\"'].*?)").matcher(content);

输出是(“I am do',但我需要捕获I am do'intesting。不确定我在这里失踪了吗?

类似地,输入可以是“$.test(\'I am do'intesting\')”输出应该是I am do'intesting

最佳答案

\$.test.*?(.*?["'](.*?)["'].*?)

这是你的正则表达式。此正则表达式在 ["'] 和另一个 ["'] 之间使用惰性量词。当您的输入为: $.test("I am do'in testing")< 时,这使得它在 " (双引号)和 ' 单引号之间匹配:/

因此它匹配并捕获捕获组 #1 中的 I am do

另一个问题是您没有在 $ 之后转义点,这可能会导致匹配任何字符而不是文字点。

您可以使用此正则表达式来匹配单引号或双引号之间的字符串,并使用反斜杠跳过转义引号:

\$\.test[^'"]*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'((?:[^'\\]*(?:\\.[^'\\]*)*))').*

RegEx Demo

代码:

final String regex = "\\$\\.test[^'\"]*(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'((?:[^'\\\\]*(?:\\\\.[^'\\\\]*)*))').*";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher( input );

while (matcher.find()) {
System.out.printf("Group-1: %s, Group-2: %s%n", matcher.group(1), matcher.group(2));
}

关于java - 如何捕获这个带有引号的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50515526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com