正则表达式入门

正则表达式初步

正则表达式是一个字符串,可以用来匹配给定格式的字符。

举个例子,假如我们需要爬取网页的内容,那么当获得网页的源代码之后如何在看似混乱的html代码中获取需要的信息就成了一个重要的问题。而正则表达式就提供了匹配的一个途径。

下面是一些具体的正则表达式的字符集




转义字符

对于\,*,$, .等在正则表达式中有特殊含义的字符,需要在前面添加\表示原本字符的含义。

分组()

用()括起来的部分,作为一个整体,后面可以跟数量词。关于分组的顺序,编号为i的分组是即为左数第i个左括号的分组。我们往往使用分组来提取需要的部分,比如python的group(index)就返回第index个分组匹配的对象。

贪婪模式

 量词 +,*,?,{m,n}  默认匹配尽可能长的字符串 

非贪婪模式可以在上述量词之后加?表示非贪婪。

字符边界

\A 与字符串开始处匹配,不消耗任何字符 

 \Z 与字符串结束的地方匹配,不消耗任何字符 

^  与字符串开始处匹配,不消耗任何字符。在多行模式中,匹配每一行开头 

$  与字符串结束的地方匹配,不消耗任何字符。在多行模式中,匹配每一行末尾 

|的用法

表示“或”,如果没有放在"()"中,则起作用范围是直到整个正则表达式 开头或结尾或另一个 "|"

断言

 分组开头为 ?=, ?!,?<=, ?<!,则分组成为断言。断言必须被满足,但不消耗字符。

  1. Y(?=X ) 声明目标串Y(可为空)右侧须满足模式X。X不消耗任何字符。例如, \w+(?=\d) 与后跟数字的单词匹配,但该数字未被消耗。 
  2. Y(?!X) 声明目标串Y(可为空)右侧不允许满足模式X。X不消耗任何字符。例如,例 如,\w+(?!\d) 与后不跟数字的单词匹配,但不消耗该数字 。 
  3. (?<=X)Y 声明目标串Y(可为空)左侧必须满足模式X。X不消耗任何字符。例如, (?<=19)89 与跟在 19 后面的 89 的实例匹配。X须定长。 
  4. (?<!X)Y 声明目标串Y(可为空)左侧不允许满足模式X。例如,(?<!19)89 与不跟在 19 后面的 89 的实例匹配。X须定长。 

举例:

1. (?=[456])(\d{4}-?){4}(?<!7)$ 可以用来表示

合法的卡号:

1.卡号以4,5或6开头

2.卡号不以7结尾

3.必须正好包含16个数字

4.卡号中的每四个数字可能以'-’分隔

5.除数字与'-'外不能包含有其它字符

2. 可以用"(aa)*((ab)(aa|bb)*(ab|ba))*b(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*"

表示所有字符集为{a, b}且由偶数个a和奇数个b构成的字符串。

(本题的思考方式是因为ab个数皆为偶数可以表示为(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*,那么奇数则在前面加上(aa)*((ab)(aa|bb)*(ab|ba))*b即可,也就是找到一个前面都是{ab}偶数的b,那么后面都是偶数即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  《正则表达式入门经典》详细解释了正则表达式的各个组成部分、这些组成部分的含义、如何使用它们,以及在编写正则表达式时如何避免常见的错误。正则表达式能够帮助用户和开发人员更加有效地查找和操纵文本内容。而且,正则表达式已经得到了许多脚本语言、编程语言和数据库的良好支持。这本示例丰富的教程将打破所谓正则表达式难以掌握的传统神话。   通过逐章地讲解如何在流行的Windows平台的软件——包括数据库、跨平台的脚本语言和编程语言中使用正则表达式,你将学习到如何有效地驾驭正则表达式所提供的强大功能,并且全面理解正则表达式的高度灵活性和无限潜能。   ·正则表达式的基本概念以及如何编写正则表达式   ·如何分解文本操作问题并构建符合逻辑的正则表达式模式   ·如何在不同的脚本或编程语言以及软件包中使用正则表达式   ·当前各种正则表达式实现之间存在的差别   ·可以解决日常问题的、可重用的正则表达式示例代码   《正则表达式入门经典》读者对象   《正则表达式入门经典》适用于那些需要解决文本操作问题,但还不了解正则表达式的开发人员。虽然一些基本的编程或脚本编写经验是有用的,但并不是必需的。   《正则表达式入门经典》技术支持从Web站点www.wrox.com和www.tupwkcom.cn/downpage上可以获取《正则表达式入门经典》的源代码和Wrox技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值