摘要:
也有些时候,确实需要用到.*(或者[\s\S]*),比如匹配HTML代码中的JavaScript示例就是如此。 匹配的模式仍然是:匹配open tag和close tag,以及它们之间的内容。open tag是 ,这两段的内容是固定的,非常容易写出对应的表达式,但之间的内容怎么匹配呢?在JavaSc 阅读全文
摘要:
因为点号能匹配几乎所有的字符,所以实际应用中许多人图省事,随意使用.*或.+,结果却事与愿违,下面以双引号字符串为例来说明。 之前我们使用表达式"[^"]*"匹配双引号字符串,而"图省事"的做法是".*"。通常这么用是没有问题的,但也可能有意外,例2-12就说明了一种如此。 例2-12 "图省事"的 阅读全文
摘要:
上一章讲到了各种字符组,与它相关的还有一个特殊的元字符:点号.。一般文档都说,点号可以匹配"任意字符",点号确实可以匹配"任意字符",常见的数字、字母、各种符号都可以匹配,如例2-10所示。 例2-10 点号.的匹配 有一个字符不能由点号匹配,就是换行符\n。这个字符平时看不见,却存在,而且在处理时 阅读全文
摘要:
正则表达式的功能很多,除去之前介绍的验证(字符串能否由正则表达式匹配),还可以从某个字符串中提取出某个字符串能匹配的所有文本。 上一章提到,re.search()如果匹配成功,返回一个MatchObject对象。这个对象包含了匹配的信息,比如表达式匹配的结果,可以像例2-7那样,通过调用MatchO 阅读全文
摘要:
{m,n}是通用形式的量词,正则表达式还有三个常用量词,分别是+、?、*。它们的形态虽然不同于{m,n},功能却是相同的(也可以把它们理解为"量词简记法"),具体说明见表2-2。 表2-2 常用量词 常用量词 {m,n}等价形式 说明 * {0,} 可能出现,也可能不出现,出现次数没有上限 + {1 阅读全文
摘要:
根据上一章的介绍,可以用字符组[0-9]或者\d匹配单个数字字符。现在用正则表达式来验证更复杂的字符串,比如大陆地区的邮政编码。 粗略来看,邮政编码并没有特殊的规定,只是6位数字构成的字符串,比如201203、100858,所以用正则表达式来表示就是\d\d\d\d\d\d,如例2-1所示,只有同时 阅读全文
摘要:
前面介绍了常用的字符组,但是在某些文档中,你可能会发现类似[:digit:]、[:lower:]之类的字符组,看起来不难理解(digit就是"数字",lower就是"小写"),但又很奇怪,它们就是POSIX字符组(POSIX Character Class)。因为某些语言的文档中出现了这些字符组,为 阅读全文
摘要:
以上介绍了字符组的基本功能,它们在常用的语言中都有提供;还有些语言中为字符组提供了更强大的功能,比如Java和.NET就提供了字符组运算的功能,可以在字符组内进行集合运算,在某些情况下这种功能非常实用。 如果要匹配所有的元音字母(为讲解简单考虑,暂时只考虑小写字母的情况),可以用[aeiou],但是 阅读全文
摘要:
用[0-9]、[a-z]等字符组,可以很方便地表示数字字符和小写字母字符。对于这类常用的字符组,正则表达式提供了更简单的记法,这就是字符组简记法(shorthands)。 常见的字符组简记法有\d、\w、\s。从表面上看,它们与[…]完全没联系,其实是一致的。其中\d等价于[0-9],其中的d代表" 阅读全文
摘要:
1.5 排除型字符组 在方括号[…]中列出希望匹配的所有字符,这种字符组叫做"普通字符组",它的确非常方便。不过,也有些问题是普通字符组不能解决的。 给定一个由两个字符构成的字符串str,要判断这两个字符是否都是数字字符,可以用[0-9][0-9]来匹配。但是,如果要求判断的是这样的字符串--第一个 阅读全文
摘要:
1.4 元字符与转义 在上面的例子里,字符组中的横线-并不能匹配横线字符,而是用来表示范围,这类字符叫做元字符(meta-character)。字符组的开方括号[、闭方括号]和之前出现的^、$都算元字符。在匹配中,它们有着特殊的意义。但是,有时候并不需要表示这些特殊意义,只需要表示普通字符(比如"我 阅读全文
摘要:
正则表达式提供了-范围表示法(range),它更直观,能进一步简化字符组。 所谓"-范围表示法",就是用[x-y]的形式表示x到y整个范围内的字符,省去一一列出的麻烦,这样[0123456789]就可以表示为[0-9]。如果你觉得这不算什么,那么确实比[abcdefghijklmnopqrstuvw 阅读全文
摘要:
字符组表示“在同一个位置可能出现的各种字符”, 其写法是在一对方括号 [ 和 ] 之间列出所有可能出现的字符。 例 1 - 1 判断数字字符的伪代码 charStr == "0" || charStr == "1" ··· || charStr == "9" 这种解法的问题在与太过于烦琐 例 1 - 阅读全文