问题描述
比如在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的/newjavascript可以这样测试var _str = 'http://www.iteye.com/problems/new?aaa=23';var _regex = //w+$|/w+(?=?)/var _result = _regex.exec(_str);alert(_result);
解决方案二:
我用这个表达式"/\w+$"能正常匹配,楼主的那个我也试了一下,也能正常匹配,楼主你再试一下,我给出代码: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());} }}
解决方案三:
lastIndexOf一下不就OK了...--如果只是为了练习正则
解决方案四:
你要匹配的是最后的/***那么之前是什么不都可以忽略么?(或者只要具有应有的格式)那么所要匹配的就是 http:// (//任意字符)* (//任意字符)/是转义字符
解决方案五:
向前查看(?=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"));与向前查看相反,我们还有向后查看,语法为:(?<=X),它用户限定表达式前必须包含指定的内容。我们还是用一个简单的例子来说明: 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,这时候向后查看成功了,后续的表达式也匹配成功,因此返回了匹配结果。
解决方案六:
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));} 不知道是不是满足你的要求
解决方案七:
没明白 什么意思