0

我在下面有这个字符串:

foob/site?article=foo-title&id=12

如何foo-title使用正则表达式从上述字符串中获取?一个简短的解决方案将不胜感激。

注意foo-title可以是任何标题。

4

5 回答 5

1

这种模式将起作用:

(?<=article=)[^&]++(?=&)
  • (?<=article=)“文章=”的积极回溯
  • [^&]++匹配所有不是“&”的东西,所有格
  • (?=&)"&" 的积极前瞻

这是一个例子是Java:

public static void main(String[] args) {
    final String s = "foob/site?article=foo-title&id=12";
    final Pattern p = Pattern.compile("(?<=article=)[^&]++(?=&)");
    final Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group());
    }
}
于 2013-10-02T14:33:31.613 回答
1

我相信 Java 支持积极的后视,所以你可以使用:

(?<=article=)[^&]+
于 2013-10-02T14:34:00.317 回答
0

不确定 Javascript 是否适合您,但以下是您在大多数其他正则表达式平台中的操作方式:

var s = 'foob/site?article=foo-title&id=12';
r = s.replace(/^[^=]+=([^&]+).*$/, '$1');
//=> foo-title

更新:根据您的评论,这里是 Java 代码:

String r = "oob/site?article=foo-title&id=12".replaceAll("^[^=]+=([^&]+).*$", "$1");
//=> foo-title
于 2013-10-02T14:33:11.883 回答
0

以下正则表达式应该这样做:

article=([^&]+)&

标题将分配给第 1 组。Java 中的示例用法:

Pattern p = Pattern.compile("article=([^&]+)&");
Matcher m = p.matcher("foob/site?article=foo-title&id=12");
if (m.find()) {
    String title = m.group(1);
    // process the title
}
于 2013-10-02T14:33:54.157 回答
0

这应该有效:

"article=(.*?)&"
于 2013-10-02T14:37:22.960 回答