当前位置: 代码迷 >> J2SE >> 正则: "一行的结尾" $ 为什么不好使?该如何解决
  详细解决方案

正则: "一行的结尾" $ 为什么不好使?该如何解决

热度:477   发布时间:2016-04-24 15:04:45.0
正则: "一行的结尾" $ 为什么不好使??
String   url= "http://www.baidu.com/s?wd=%CC%EC%BB%A8%B0%E5 ";
Pattern   wd=   Pattern.compile( "[&|\\?]wd=(.+)[&|$] ");
java.util.regex.Matcher   m   =   P_WD.matcher(url);
if   (m.find())
{
String   keywords   =   m.group(1);
System.out.println(keywords+ ": "+java.net.URLDecoder.decode(keywords,   "GBK "));
}


如果     url= "http://www.baidu.com/s?wd=%CC%EC%BB%A8%B0%E5&ie=gb2312 "   这是可以取出关键字的.  

为什么   url= "http://www.baidu.com/s?wd=%CC%EC%BB%A8%B0%E5 ";   这样就不行???

哪位大侠帮看看??

------解决方案--------------------
Pattern wd= Pattern.compile( "(? <=\\?wd=)(.+)(&.+)? ");
------解决方案--------------------
$只是边界符号,并不是一个真正的字符
------解决方案--------------------
这样先判断 url 中是否存在 ‘&’字符,如果有 则用的 正则判断如果不是 则换一个判断~!

public String getBody(String args) {
String f = "[&|\\?]wd=(.+) ";
if (args.indexOf( "& ") != -1)
f = "[&|\\?]wd=(.+)[&] ";

Pattern p = Pattern.compile(f);
Matcher m = p.matcher(args);
if (m.find())
return m.group(1).toString();
else
return " ";
}
------解决方案--------------------
Pattern wd= Pattern.compile( "[&|\\?]wd=(.+?)(&.*)?$ ");
------解决方案--------------------
可能$只能放在最后,表示串结束,放在 []就表示一个普通字符而已
xx$跟xx[$]不一样,楼主试试就知道了
------解决方案--------------------
Pattern wd = Pattern.compile( "[&?]wd=(.+)(&.*)?$ ");

or

keywords = url.replaceAll( ".*[&?]wd=([^&]*).* ", "$1 ")
------解决方案--------------------
Pattern wd = Pattern.compile( "[&?]wd=([^&]*) ");
------解决方案--------------------
真是服了楼上们了。。。

在[...]中有大部分是不需要转义的,目前已知 "[ "和 "] "需要转义, "- "有时候需要转义, "| "就是表示一条竖线, "$ "和 "^ "也只是一个普通字符
  相关解决方案