1

これは以下に関連しています: RegEx: Grabbing values between quote marks

次のような文字列がある場合:

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、キャプチャ グループで a を使用します。

{
    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 に答える