3

/ で Java の文字列を分割しようとしていますが、/ が [] の間にある場合は無視する必要があります。たとえば、次の文字列がある場合

/foo/bar[donkey=King/Kong]/value

次に、出力で次を返したいと思います

  • ふー
  • bar[ロバ=キング/コング]
  • 価値

他にも同様の投稿をいくつか見ましたが、私がやろうとしていることと正確に一致するものは見つかりませんでした. 私は String.split() メソッドを次のように試してみましたが、奇妙な結果が見られました:

Code:  value.split("/[^/*\\[.*/.*\\]]")

Result:  [, oo, ar[donkey=King, ong], alue]

以下を取り戻すために何をする必要がありますか:

Desired Result:  [, foo, bar[donkey=King/Kong], value]

ありがとう、ジェレミー

4

2 に答える 2

2

/続けて0個以上の バランスのとれたブラケットのペアを分割する必要があります。

String str = "/foo/bar[donkey=King/Kong]/value";

String[] arr = str.split("/(?=([[^\\[\\]]*\\[[^\\[\\]]*\\])*[^\\[\\]]*$)");     
System.out.println(Arrays.toString(arr));

出力:

[, foo, bar[donkey=King/Kong], value]

よりユーザーフレンドリーな説明

String[] arr = str.split("(?x)/"        +   // Split on `/`
                     "(?="              +   // Followed by
                     "  ("              +   // Start a capture group
                     "     [^\\[\\]]*"  +   // 0 or more non-[, ] character
                     "      \\["        +   // then a `[`
                     "     [^\\]\\[]*"  +   // 0 or more non-[, ] character
                     "     \\]"         +   // then a `]`
                     "  )*"             +   // 0 or more repetition of previous pattern
                     "  [^\\[\\]]*"     +   // 0 or more non-[, ] characters 
                     "$)");                 // till the end
于 2013-02-18T22:31:54.947 に答える
0

次の文字列のうち、以下の正規表現はfoobarに一致しますが、 foxbazには一致しません。これらの後に閉じ括弧が続くためです。否定的な先読みについて調べてください。

fox]foo/bar/baz]

正規表現:

\b(\w+)\b(?!])
于 2013-02-19T00:31:39.230 に答える