日期:2014-05-20  浏览次数:20716 次

==========JAVA正则的问题==========
match_pattern   =   "[\\?&;/](\\w+)=([^&;/]+) ";

p   =   Pattern.compile(match_pattern);

tempStr= "http://desk.myspace.com/html.ng/site=myspace&position=skyscraper&page=14000000&rand=8579377470&acnt=2&schoolpage=0 ";

while((m   =   p.matcher(tempStr))   !=   null)
{
            groupCount   =   m.groupCount();

for(i=1;   i <=groupCount;   i++)
{
if(m.find(i))
{
matchedStr   =   m.group(i);
                        }
            }

            end   =   m.end();
            tempStr   =   tempStr.substring(end);
}
我想取出所有 "= "前的参数名和后面的值,但是我这样执行的结果只得到第1,3,5这3对,第2,4,6被跳过了,不知道为啥.
还有个小问题[^h]表示匹配非h的串,那么匹配不包含http的串是(^http)吗?还是[^(http)]?

------解决方案--------------------
第一个问题:
因为你的正则式用错了.下面是正确的用法:
-------------------------------------------
import java.util.regex.*;
/**
*利用正则式从网页中提取参数
*@author: Eastsun
*/
public class FindT{
public static void main(String[] args){
String match_pattern = "(? <=[&/])(\\w+?)=([\\d\\w]+?)(?=&|$) ";
Pattern p = Pattern.compile(match_pattern);

String tempStr= "http://desk.myspace.com/html.ng/site=myspace&position=skyscraper&page=14000000&rand=8579377470&acnt=2&schoolpage=0 ";
Matcher m =p.matcher(tempStr);
while(m.find()){
System.out.println( "参数: "+m.group(1)+ ",值: "+m.group(2));
}
}

}
----------------------
程序运行结果:
参数: site,值: myspace
参数: position,值: skyscraper
参数: page,值: 14000000
参数: rand,值: 8579377470
参数: acnt,值: 2
参数: schoolpage,值: 0


第二个问题:
[^(http)]表示:这个字符不能是(,h,t,p,)这5个.

------解决方案--------------------
一楼的正则表达式我看不懂
经我试验将一楼的正则表达式换成String match_pattern = "(\\w+)=([\\d\\w]+) ";
也可以。
请问 "(? <=[&/])(\\w+?)=([\\d\\w]+?)(?=&|$) ";中(? <=[&/])和(?=&|$)中的? <=,?=是什么意思?还有按我对加括号分组的理解String match_pattern = "(\\w+)=([\\d\\w]+) ";中1,2组是想要的结果,可是1楼 "(? <=[&/])(\\w+?)=([\\d\\w]+?)(?=&|$) "中1,2组也是想要的结果,好神奇,按我理解1楼的2,3组才是呀。