2

次のルールで文字列を処理する必要があります。

  • 一連の で始まる場合とそうでない場合があり'ます。
  • 一連の で終わる場合とそうでない場合があり'ます。
  • 上記の間に含まれるものはすべて抽出する必要があります。ただし、囲まれた文字列には、一連の'.

たとえば、次の文字列を入力として取得できます。

  • ''''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 を使用していました+。この変更を行うと、目的の出力が得られます。しかし、正規表現の改善を歓迎します。

4

3 に答える 3

0

これは私のために働きます。

        String str = "''''aa''bb''cc''''";
        Pattern p = Pattern.compile("^'*(.*?)'*$");
        Matcher m = p.matcher(str);
        if (m.find()) {
            System.out.println(m.group(1));
        }
于 2012-05-31T08:10:56.047 に答える
0

私はJavaが苦手なので、正規表現で十分だと思います。あなたの例では、それはうまく機能します

s/^'*(.+?)'*$/$1/gm
于 2012-05-31T08:13:03.027 に答える
0

JavaのPatternクラスの境界マッチャー(http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)をご覧ください。特に$(=行の終わり)は興味深いかもしれません。また、正規表現のテストには次のeclipseプラグインをお勧めします。http://sourceforge.net/projects/quickrex/これにより、特定のテスト文字列の正規表現の一致とグループを正確に確認できます。

たとえば、次のパターンを試してください:[^'] +(。+' *。+)+ [^'$]

于 2012-05-31T08:05:27.703 に答える