0

我有一个想使用正则表达式解决的问题。我想要一个正则表达式,它将采用以下输入字符串并产生以下输出;

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

一个正则表达式可以完成上述所有操作吗?

“否”是可以接受的答案。这将使我能够继续前进并为我的问题寻找替代解决方案。

4

3 回答 3

1

我认为您不需要正则表达式。它似乎所做的只是替换?并附&加到/?path=前面。

使用replace您选择的语言中的字符串函数并从头/?path=开始。

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

JavareplaceAll()采用正则表达式,但它是文字,因此您实际上不需要知道任何正则表达式。

于 2012-07-26T00:36:50.077 回答
0

这是你想要的?

正则表达式:/^(\/[^?]*)(?:\?(.*))?/
替换:/?path=\1&\2

于 2012-07-26T01:43:55.000 回答
0

如果你特别问

一个正则表达式可以完成上述所有操作吗?

谷歌搜索,我看到perl 可以做多个替换,但这似乎不是一个正则表达式。我要说,一个正则表达式不能进行多次替换。

如果您只想使用正则表达式,它可能类似于:

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 回答