java:使用正则表达式提取子字符串

java:使用正则表达式提取子字符串,java,regex,Java,Regex,我对提取子字符串感兴趣,但我一直在为此创建正则表达式模式。我拥有的字符串数据如下: $.ajax({url:"Q" + "uestions?" + "" + "action=" + "maxim" + "um&" + "p043366329446409=08315891235072667&" + "c" + "ity="

我对提取子字符串感兴趣,但我一直在为此创建正则表达式模式。我拥有的字符串数据如下:

$.ajax({url:"Q" + "uestions?" 
                + "" + "action=" 
                + "maxim" + "um&" 
                + "p043366329446409=08315891235072667&" 
                + "c" + "ity=" 
                + k.val() + "&" 
                + e + "=888",success:succFun,error:errFun,async:false});
        };
我想从上面的字符串中提取
p043366329446409=08315891235072667
部分。每次我向服务器发出请求时,此数据都会更改,但
“p0”
将始终启动字符串,而
&
将结束字符串

谢谢大家。

试试这个

String p0 = s.replaceAll(".*&(p0.+?=.+?)&.*", "$1");
试试这个:

String mydata = "<query string>";
Pattern pattern = Pattern.compile("p0([0-9]+)=([0-9]+)&");  

Matcher matcher = pattern.matcher(mydata);
int start=0,end=0; 
if(matcher.find())
{
   start=matcher.start();
   end=matcher.end();

   System.out.println(mydata.substring(start,end-1));
}
String mydata=”“;
Pattern=Pattern.compile(“p0([0-9]+)=([0-9]+)&”);
Matcher Matcher=pattern.Matcher(mydata);
int start=0,end=0;
if(matcher.find())
{
start=matcher.start();
end=matcher.end();
System.out.println(mydata.substring(start,end-1));
}

通过这么多的连接,你把它变成了一个字符串。为什么你不能直接使用它?@ling.s我从服务器上获取数据,所以我不能直接使用它。我只能使用正则表达式。查询参数键“p0433663294409”是否总是常量?@Braj不,它不是常量。每次我们请求数据时它都会改变。这意味着其他值是常量,而你需要此字符串中只需要动态值?我刚刚对我的问题进行了编辑,以告知字符串中没有常量,因此我们不能假设字符串将以p0433366329446409开头。对此感到抱歉。您使用的是什么s.replaceAll()?这将如何返回我所需的值?在这种情况下,它不会替换而是返回圆括号中的组1-表达式的内容,请尝试使用此字符串s=“uestions?action=maximum&p04366329446409=08315891235072667&city=“;字符串p0=s.replaceAll”(.*&(p0.+?=.+)&.*,“$1”);System.out.println(p0);适用于我您的代码只是给我字符串的第一部分,而不是“=”运算符之后。为什么使用while循环?如果此类参数不止一次出现。您可以找到匹配字符串的开始索引和结束索引,然后使用substring方法找到所需的输出。感谢Braj提供的解决方案。