2

タイトルがわかりにくいので、サンプルを書いて説明します。

多くのネストされた を含む文字列があります{}

 /users/{<\w{2,4}\d{3}>id}

{}パス変数のプレースホルダーとして使用していることがわかります。内部に正規表現を含めることができ、 {}.

java で正規表現を記述してパス パターンを解析し、{}outer を持たない部分を見つける方法{}。この例では、 である必要があります{<\w{2,4}\d{3}>id}

ありがとう〜

アップデート

与えられた例は単純すぎるため、次のようになります。

/users/{<\w{2,4}\d{3}>id}/{action}/{<\w{2,4}\d{3}>targetId}

結果は次のようになります。

{<\w{2,4}\d{3}>id}
{action}
{<\w{2,4}\d{3}>targetId}

だからうまくいき\\{.*\\}ません。

4

2 に答える 2

1

のようなケースはあり/users/{regex1}/{regex2}ますか?

はいの場合、この場合"\\{.*\\}"は を返し"{regex1}/{regex2}"ます。:(

そうでない場合は"\\{(.*)\\}"、貪欲であるため、要求した表現全体を使用することになります。;)

編集:

あなたの編集された質問では、上記の@aixからのコメントが正しい答えでした: 正規表現で外側の`{}`を持たない`{}`部分を見つけてください

彼はあなたの問題がそこで解決されたものと似ていると指摘しました:

于 2012-04-25T14:26:26.790 に答える
0

おそらく私はあなたの例を誤解しています。ただし、2番目の例は次のとおりです。

/users/{<\w{2,4}\d{3}>id}/{action}/{<\w{2,4}\d{3}>targetId}

結果は次のようになります。

{<\w{2,4}\d{3}>id}
{action}
{<\w{2,4}\d{3}>targetId}

あなた{}が常に区切りの中に入れたいと思っているのはあなた/ですか?もしそうなら、分割して/各結果をチェックするだけで、これを簡単に行うことができます。

String test = "/users/{<\\w{2,4}\\d{3}>id}/{action}/{<\\w{2,4}\\d{3}>targetId}";
String[] pieces = test.split("(?<!\\\\)/");
for (String piece : pieces) {
    if (piece.matches("^\\{.*")) {
        /* do whatever */
    }
}

/エスケープが区切り文字ではないと仮定して、複雑な分割を行ったところ。

これはあなたが探しているようなものですか?

于 2012-04-25T16:09:17.593 に答える