次のルールで文字列を処理する必要があります。
- 一連の で始まる場合とそうでない場合があり
'
ます。 - 一連の で終わる場合とそうでない場合があり
'
ます。 - 上記の間に含まれるものはすべて抽出する必要があります。ただし、囲まれた文字列には、一連の
'
.
たとえば、次の文字列を入力として取得できます。
''''aa''''
''''aa
aa''''
''''aa''bb''cc''''
上記の例について、(それぞれ) 以下を抽出したいと思います。
aa
aa
aa
aa''bb''cc
Javaで次のコードを試しました:
Pattern p = Pattern.compile("[^']+(.+'*.+)[^']*");
Matcher m = p.matcher("''''aa''bb''cc''''");
while (m.find()) {
int count = m.groupCount();
System.out.println("count = " + count);
for (int i = 0; i <= count; i++) {
System.out.println("-> " + m.group(i));
}
しかし、次の出力が得られます。
count = 1
-> aa''bb''cc''''
-> ''bb''cc''''
ポインタはありますか?
編集:気にしないでください。*
正規表現の最後に . の代わりに a を使用していました+
。この変更を行うと、目的の出力が得られます。しかし、正規表現の改善を歓迎します。