w1100n
This site is best viewed in Google Chrome
wiloon, 8/19/2012 13:17 | Tag:

  1        概述 1.1     什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部。 捕获组有两种形式,一种是普通捕获组,另一种是命名捕获组,通常所说的捕获组指的是普通捕获组。语法如下: 普通捕获组:(Expression) 命名捕获组:(?<name>Expression) 普通捕获组在大多数支持正则表达式的语言或工具中都是支持的,而命名捕获组目前只有.NET、PHP、Python等部分语言支持,据说Java会在7.0中提供对这一特性的支持。上面给出的命名捕获组的语法是.NET中的语法,另外在.NET中使用(?’name’Expression)与使用(?<name>Expression)是等价的。在PHP和Python中命名捕获组语法为:(?P<name>Expression)。 另外需要说明的一点是,除(Expression)和(?<name>Expression)语法外,其它的(?…)语法都不是捕获组。 1.2     捕获组编号规则 编号规则指的是以数字为捕获组进行编号的规则,在普通捕获组或命名捕获组单独出现的正则表达式中,编号规则比较清晰,在普通捕获组与命名捕获组混合出现的正则表达式中,捕获组的编号规则稍显复杂。 在展开讨论之前,需要说明的是,编号为0的捕获组,指的是正则表达式整体,这一规则在支持捕获组的语言中,基本上都是适用的。下面对其它编号规则逐一展开讨论。 1.2.1  普通捕获组编号规则 如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组。在只有普通捕获组的情况下,捕获组的编号是按照“(”出现的顺序,从左到右,从1开始进行编号的 。 正则表达式:(\d{4})-(\d{2}-(\d\d))   上面的正则表达式可以用来匹配格式为yyyy-MM-dd的日期,为了在下表中得以区分,月和日分别采用了\d{2}和\d\d这两种写法。 用以上正则表达式匹配字符串:2008-12-31,匹配结果为: 编号 命名 捕获组 匹配内容 0 (\d{4})-(\d{2}-(\d\d)) 2008-12-31 1 (\d{4}) 2008 2 (\d{2}-(\d\d)) 12-31 3 (\d\d) 31 1.2.2  … Continue reading

wiloon, 8/19/2012 11:35 | Tag:

java正则表达式中的  ? 是惰性匹配,具体的看下面的例子: 将输出空,因为没有加问号,此时进行的是最长匹配(贪婪匹配) 可以做如果更改 将输出:主页</a 如果把程序修改为: 将输出:主页 不加 ? 表示贪婪,加 ? 表示勉强,区别如下: 勉强是从左边一个一个地吃直到匹配为止,不加 ?的是一口吃掉整个字符串,然后从最后一个一个地吐出来直到匹配为止 字符串 a=====b=====b=== a.*b 将匹配满足条件最长的字符串 a=====b=====b 工作方式: 首先将:a=====b=====b=== 全部吃掉,从右边一个一个地吐出来 1. a=====b=====b=== 不匹配,吐出一字符 2. a=====b=====b== 不匹配,再吐出一字符 3. a=====b=====b= 不匹配,再吐出一字符 4. a=====b=====b 匹配了,结束。如果再不匹配继续吐,直到没有字符了,匹配失败 a.*? 将匹配满足条件最短的字符串 a=====b 工作方式: 从左边一个一个地吃掉字符 … Continue reading

wiloon, 8/19/2012 11:08 | Tag:

3位数字 d{3}   众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。 大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台。因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。 // 反斜杠 /t 间隔 (‘/u0009’) /n 换行 (‘/u000A’) /r 回车 (‘/u000D’) /d 数字 等价于[0-9] /D 非数字 等价于[^0-9] /s 空白符号 [/t/n/x0B/f/r] /S 非空白符号 [^/t/n/x0B/f/r] /w 单独字符 [a-zA-Z_0-9] /W 非单独字符 [^a-zA-Z_0-9] /f 换页符 /e … Continue reading

辽ICP备14012896