正则表达式如何最小匹配

问题描述

比如在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));} 不知道是不是满足你的要求
解决方案七:
没明白 什么意思

时间: 2024-09-20 17:33:29

正则表达式如何最小匹配的相关文章

正则表达式实现最小匹配功能的方法

本文实例讲述了正则表达式实现最小匹配功能的方法.分享给大家供大家参考,具体如下: 正则表达式默认情况下实现的是最大化匹配,这在有些情况下是非常不愿意出现的,比如下面这段代码: # starting IndiaInventoryAPP.exe" ~~DisplayVariableValues "parameterGroup,mailRecipients,ModuleArgs"~DisplayVariableValues "LogFolder"~$binary

正则表达式中最短匹配模式的用法浅析

前言 最近有一次想用正则表达式从网页里面抓取一些东西出来,内容不复杂却出现不少问题.下面话不多说,来一起看看详细的介绍: 当我们用正则表达式去匹配一个标签的首尾的时候,比如匹配 <h1>hello world</h1> 中的 h1 的开始和闭合标签 可能很多人会这样写 /<.*h1>/g 但是这样真的可以吗? 因为 * 匹配符是匹配前面一个字符的零到多个,而且它是贪婪匹配的 所以你得到的就会是下面的结果了. 显然这并不是我们想要的,那么怎么把贪婪匹配换成最小匹配呢, /

c-如何用C语言编写代码实现:文件中一行的开头是否与正则表达式^$w_ang[.* 相匹配

问题描述 如何用C语言编写代码实现:文件中一行的开头是否与正则表达式^$w_ang[.* 相匹配 如何用C语言编写代码实现:文件中一行的开头是否与正则表达式^$w_ang[.* 相匹配,,,怎么写代码啊,,求大神们指点,,万分感谢!!!! 解决方案 正则表达式应该可以看做是字符串匹配吧

正则表达式 html标签匹配

问题描述 正则表达式 html标签匹配 8C 有这样一段html标签<p style="""">aaa**<p>bbb</p>ccc<p>ddd</p>eee</p>**<p>ffff</p>我想最终得到的是第一行中从最开始p标签开始到最末端p标签结束,其中可能还包括多个成对出现的p标签例,但不包括下一行的p标签,应该怎样写呢?我这样写:<p.*?(<p>

正则去除所有匹配项-正则表达式替换所有匹配项

问题描述 正则表达式替换所有匹配项 var str= '[张三]asd[张三丰]'; function getStrLength(str) { var len = str.length; var reg = /([[u4E00-u9FA5]]{2,4})+$/; for (var i = 0; i < len; i++) { str.replace(reg,"1"); } return str.length; } 怎么把匹配到的张三.张三丰之类替换为字符'1' 解决方案 /**/

正则表达式是怎么匹配的

问题描述 正则表达式是怎么匹配的 求问匹配结果是怎么来的? 怎么匹配顺序得到的结果? String s="wangwu zhangsan lisi"; String reg=" ?";//"空格?" String[] result=s.split(reg); System.out.println(Arrays.toString(result)); 输出结果[w, a, n, g, w, u, , , , , z, h, a, n, g, s, a

javascript正则表达式之regexp,匹配string,正则指定字符

exec() 检索字符串中的指定值,返回值是被找到的值,如果没有发现匹配,则返回 null: 主要的RegExp模式匹配方法是exec(),其与上一篇介绍的String对象的match方法相似,只不过它是以字符串为参数的RegExp方法,而不是以RegExp对象为参数的字符串方法.呼,这一句有点像绕口令,没办法,书上的原话,抄过来让大家乐一乐,呵.exec()方法在一个字符串中检索匹配,如果没有找到任何匹配返回null,如果它找到了一个匹配,将返回一个数组. 就像方法match()为非全局检索返

正则表达式之 Unicode 匹配特殊字符_正则表达式

首先声明,本文所有的代码都是在 ES6 下面运行,ES5需要修改之后才能运行,但是本文没有涉及到太多的ES6新特性,而且由于v8对u修饰符不支持,最后的实现也基本是用ES5的知识写的代码. 最初我只是想记录下正则表达式用unicode的方式来匹配特殊字符,写着写着发现 v8 对 u 修饰符的不支持,又转而去研究怎么转换字符串到utf-16的格式,在研究怎么转换的过程中发现ES5的正则对 unicode 编码单元 > 0x10000 的字符串不支持,再转而去实现了一遍对大于 0x10000 的字符

VBS教程:正则表达式简介 -字符匹配_vbs

字符匹配 句点 (.) 匹配一个字符串中任何单个的打印或非打印字符,除了换行符 (\n) 之外.下面的 Visual Basic Scripting Edition 正则表达式可以匹配 'aac'.'abc'.'acc'.'adc'如此等等,同样也可以匹配 'a1c'.'a2c'.a-c'以及 a#c': /a.c/ 等价的 VBScript 正则表达式为: "a.c" 如果试图匹配一个包含文件名的字符串,其中句点 (.) 是输入字符串的一部分,则可以在正则表达式中的句点前面加上一个反