1

这与:RegEx:在引号之间抓取值有关。

如果有这样的字符串:

HYPERLINK "hyperlink_funda.docx" \l "Sales"

链接上给出的正则表达式

(["'])(?:(?=(\\?))\2.)*?\1

在给我

[" HYPERLINK ", " \l ", " "]

什么正则表达式将返回用引号括起来的值(特别是在\"标记之间)?

["hyperlink_funda.docx", "Sales"]

使用Java,String.split(String regex)方式。

4

2 回答 2

2

我认为您误解了该String.split方法的性质。它的工作是通过匹配分隔符的特征而不是通过匹配要返回的字符串的特征来找到一种拆分字符串的方法。

相反,您应该使用 aPattern和 a Matcher

String txt = " HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" ";

String re = "\"([^\"]*)\"";

Pattern p = Pattern.compile(re);
Matcher m = p.matcher(txt);
ArrayList<String> matches = new ArrayList<String>();
while (m.find()) {
    String match = m.group(1);
    matches.add(match);
}
System.out.println(matches);
于 2014-09-11T15:37:00.703 回答
2

您不应该将其与.split()方法一起使用。而是使用Pattern捕获组:

{
    Pattern pattern = Pattern.compile("([\"'])((?:(?=(\\\\?))\\3.)*?)\\1");
    Matcher matcher = pattern.matcher(" HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" ");

    while (matcher.find())
        System.out.println(matcher.group(2));
}

输出:

hyperlink_funda.docx
销售

这是一个正则表达式演示,这是一个在线代码演示

于 2014-09-11T15:49:57.290 回答