如何使用regex获取此URL参数

String url = "mysite.com/index.php?name=john&id=432" 

如何提取id参数(432)?

它可以位于URL中的任何位置,并且id的长度也会变化

您可以使用HttpClient包中的Apache URLEncodedUtils :

 import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import java.nio.charset.Charset; import java.util.List; public class UrlParsing { public static void main(String[] a){ String url="http://mysite.com/index.php?name=john&id=42"; List args= URLEncodedUtils.parse(url, Charset.defaultCharset()); for (NameValuePair arg:args) if (arg.getName().equals("id")) System.out.println(arg.getValue()); } } 

这打印到控制台42。

如果您将url存储在URI对象中,您可能会发现直接接受URI实例的URLEncodedUtils.parse的重载。 如果您使用此重载版本,则必须将字符集作为字符串提供:

 URI uri = URI.create("http://mysite.com/index.php?name=john&id=42"); List args= URLEncodedUtils.parse(uri, "UTF-8"); 

我只是给出一个抽象的正则表达式。 [^&后添加你不想要的任何内容

 Pattern pattern = Pattern.compile("id=([^&]*?)$|id=([^&]*?)&"); Matcher matcher = pattern.matcher(url); if (matcher.matches()) { int idg1 = Integer.parseInt(matcher.group(1)); int idg2 = Integer.parseInt(matcher.group(2)); } 

idg1idg2都有值。

您可以使用:

 String id = url.replaceAll("^.*?(?:\\?|&)id=(\\d+)(?:&|$).*$", "$1"); 

正则表达式已经给出了,但你也可以通过一些简单的拆分来实现:

 public static String getId(String url) { String[] params = url.split("\\?"); if(params.length==2) { String[] keyValuePairs = params[1].split("&"); for(String kvp : keyValuePairs) { String[] kv = kvp.split("="); if(kv[0].equals("id")) { return kv[1]; } } } throw new IllegalStateException("id not found"); }