2

正規表現を使用して、次の文字列 [DOC TEXT] STARTS WITH [foo] からテキスト「STARTS WITH」を取得しようとしています。これには次のコードを使用しました。

String expertWhereClause = (String) formFields
                    .get(Constants.EXPERT_SEARCH_WHERECLAUSE);
            String delims = "\\[(.*?)\\]";
            String[] tokens = expertWhereClause.split(delims);

しかし、次の文字列 "[, STARTS WITH ]" を取得しています。「STARTS WITH」が欲しいだけです。

正規表現は初めてです。ここで私を助けてください。

前もって感謝します

4

3 に答える 3

3

これに使用できますMatcher

Matcher m = Pattern.compile("\\]([^\\[]*)\\[").matcher("[Hello]world[!!!]");
while (m.find()) {
    System.out.println(m.group(1));
}

このコード フラグメントは ideone に出力されます。 world

[^\\[]*の代わりに正規表現を使用するように変更したことに注意してください.*?これにより効率が向上します。これは、より長い入力の場合に重要になる場合があります。

于 2012-08-22T18:18:16.050 に答える
1

次の正規表現を使用します。

\]\s*([^\[]*?)\s*\[

使用している言語によっては、バックスラッシュをエスケープする必要がある場合があります。
更新: Java の場合、バックスラッシュをエスケープします

\\]\\s*([^\\[]*?)\\s*\\[

目的のテキストが最初のグループに取り込まれます。

于 2012-08-22T18:22:48.857 に答える
1

Java の場合は、次のコードを使用できます。

String str = "[DOC TEXT] STARTS WITH [foo] ";
System.out.printf("<%s>%n", 
                    str.replaceAll("^[^\\]]+\\]\\s*([^\\[]+?)\\s*\\[.*$", "$1"));
// output
//<STARTS WITH>
于 2012-08-22T18:23:02.140 に答える