我在下面有这个字符串:
foob/site?article=foo-title&id=12
如何foo-title
使用正则表达式从上述字符串中获取?一个简短的解决方案将不胜感激。
注意:foo-title
可以是任何标题。
这种模式将起作用:
(?<=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());
}
}
我相信 Java 支持积极的后视,所以你可以使用:
(?<=article=)[^&]+
不确定 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
以下正则表达式应该这样做:
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
}
这应该有效:
"article=(.*?)&"