在第一个特殊字符后提取字符串

时间:2013-10-02 14:26:25

标签: java regex

我在下面有这个字符串:

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

如何使用正则表达式从上面的字符串中获取foo-title? 我们将不胜感激。

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

5 个答案:

答案 0 :(得分:1)

这种模式可行:

(?<=article=)[^&]++(?=&)
  • (?<=article=)“article =”
  • 的正面观察
  • [^&]++匹配所有不是“&amp;”,所有权
  • 的内容
  • (?=&)“&amp;”
  • 的正向前瞻

这是一个例子是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());
    }
}

答案 1 :(得分:1)

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

(?<=article=)[^&]+

答案 2 :(得分: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

答案 3 :(得分: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
}

答案 4 :(得分:0)

这应该有效:

"article=(.*?)&"