0

正規表現を使用して解決したい問題があります。次の入力文字列を受け取り、次の出力を生成する正規表現が必要です。

input               output
-----               ------
/                   /?path=/
/mypath/            /?path=/mypath/
/?myquery           /?path=/&myquery
/mypath/?myquery    /?path=/mypath/&myquery

1 つの正規表現で上記のすべてを実行できますか?

「いいえ」は受け入れられる答えです。これにより、先に進み、問題の別の解決策を探すことができます。

4

3 に答える 3

1

これには正規表現は必要ないと思います。それがしているように見えるのは、前に置き換え?&追加/?path=することだけです。

replace選択した言語の文字列関数を使用/?path=して、先頭に追加します。

// Input: /mypath/?myquery
String myquery = "/mypath/?myquery";
myquery = myquery.replaceAll("?", "&");
myquery = "/?path=" + myquery;
// Output: /?path=/mypath/&myquery

Javaは正規表現を使用しますが、これはリテラルであるため、正規表現を知る必要はありreplaceAll()ません。

于 2012-07-26T00:36:50.077 に答える
0

具体的に質問するなら

1 つの正規表現で上記のすべてを実行できますか?

グーグルで検索すると、 perl は複数の置換を実行できることがわかりますが、それは 1 つの正規表現のようには見えません。いいえ、1 つの正規表現で複数の置換を行うことはできません。

正規表現のみを使用する場合は、次のようになります。

public static void main(String[] args) {
    List<String> uris = Arrays.asList("/", "/mypath/", "/?myquery", "/mypath/?myquery");
    for (String uri : uris)
        System.out.println(uri + "\n" + rewriteURI(uri) + "\n");
}

private static String rewriteURI(String uri) {
    return uri.replaceAll("\\?", "&").replaceAll("^", "/?path=");
}

どちらが生産しますか

/
/?path=/

/mypath/
/?path=/mypath/

/?myquery
/?path=/&myquery

/mypath/?myquery
/?path=/mypath/&myquery
于 2012-07-26T01:10:38.853 に答える
0

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

正規表現:/^(\/[^?]*)(?:\?(.*))?/
置換:/?path=\1&\2

于 2012-07-26T01:43:55.000 に答える