比如在http://www.iteye.com/problems/new这个字符串中,我想匹配/new,我用"/\\w*?$"为啥匹配不成呢?
或是我应该怎么匹配最后的/***?
望不吝赐教,谢谢~
\/\w+$|\/\w+(?=\?)
其中
\/\w+$ :表示没有参数的 url 像http://www.iteye.com/problems/new
\/\w+(?=\? :表示有参数的 URL 像http://www.iteye.com/problems/new?aaa=123
把两个加起来应该能满足你的需求,取得URL的/new
javascript可以这样测试
[code="js"]var _str = 'http://www.iteye.com/problems/new?aaa=23';
var _regex = /\/\w+$|\/\w+(?=\?)/
var _result = _regex.exec(_str);
alert(_result);[/code]
没明白 什么意思
[code="java"]Pattern pattern = Pattern.compile("^http:/(/.*)*(/\w*)");
Matcher matcher = pattern.matcher("http://www.iteye.com/problems/new");
while(matcher.find()){
System.out.println(">>>>>>>>"+matcher.group(2));
}[/code] 不知道是不是满足你的要求 :D
向前查看
(?=X) 代表肯定式的向前查看,在任何匹配 Pattern 的字符串开始处匹配查找 X 表达式所代表的字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。这估计还是太难理解,还是直接用实例说明,请看下面的代码:
Pattern p = Pattern.compile("Windows(?=NT|2000|2003)");
Matcher m1 = p.matcher("WindowsXP");
assertThat(m1.find(), is(false));
Matcher m2 = p.matcher("Windows2003");
assertThat(m2.find(), is(true));
assertThat(m2.group(), equalTo("Windows"));
[color=red]与向前查看相反,我们还有向后查看,语法为:(?<=X),它用户限定表达式前必须包含指定的内容。我们还是用一个简单的例子来说明:[/color]
String string = "dog doggie bulldog"; // 向后查看的内容为 (?<= )
Pattern p = Pattern.compile("(?<= )dog");
Matcher m = p.matcher(string);
assertThat(m.find(), is(true));
assertThat(m.group(), equalTo("dog"));
assertThat(m.start(), is(4));
assertThat(m.end(), is(7));
我们可以看到当我们声明了向后查看 (?< ) 后,我们找到的内容仅为红色的 dog 部分,我们可以从它的工作方式来理解一下。在刚开始匹配时,表达式引擎先向后查看一下有没有空格字符。由于现在在开始位置,前面没有内容,所以查看失败,直接跳过第一个d开始查看o,o前面也没有空格,所以也失败进入下个字符。知道到第二个d,这时候向后查看成功了,后续的表达式也匹配成功,因此返回了匹配结果。
你要匹配的是最后的/***
那么之前是什么不都可以忽略么?(或者只要具有应有的格式)
那么所要匹配的就是 http:// (//任意字符)* (//任意字符)
/是转义字符
如果只是为了练习正则
我用这个表达式"/\w+$"能正常匹配,楼主的那个我也试了一下,也能正常匹配,楼主你再试一下,我给出代码:
[code="java"]
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("/\w*?$");
Matcher matcher = pattern.matcher("http://www.iteye.com/problems/new");
while(matcher.find()){
System.out.println(matcher.group());
}
}
}
[/code]