正则表达式基础与学习02----来自《编译原理与实践》

 前面已给出了正则表达式的一个定义,这个正则表达式使用了在所有应用程序中都常见到运算的最小集合

可为所有包含了至少一个b 的串写出一个正则表达式,如下
所示:
. * b . *
(3) 字符范围
我们经常需要写出字符的范围,例如所有的小写字母或所有的数字。直到现在都是在用表
示法a | b | . . . | z 来表示小写字母,用0 | 1 | . . . | 9来表示数字。还可针对这种情况使用一个
特殊表示法,但常见的表示法是利用方括号和一个连字符,如[ a - z ]是指所有小写字母,[ 0 -
9 ]则指数字。这种表示法还可用作表示单个的解,因此a | b | c可写成[ a b c ],它还可用于多
个范围,如[ a - z A - Z ]代表所有的大小写字母。这种普遍表示法称为字符类( character class)。
例如,[ A - Z ]是假设位于A和Z之间的字符B、C等(一个可能的假设)且必须只能是A和Z之间
的大写字母(A S C I I字符集也可)。但[ A - z ]则与[ A - Z a - z ]中的字符不匹配,甚至与A S C I I字
符集中的字符也不匹配。
(4) 不在给定集合中的任意字符
正如前面所见的,能够使要匹配的字符集中不包括单个字符很有用,这点可由用元字符表
示“非”或解集合的互补运算来做到。例如,在逻辑中表示“非”的标准字符是波形符“ ~”,
那么表示字母表中非a 字符的正则表达式就是~ a。非a、b 及c 表示为:
~ ( a | b | c )
在L e x中使用的表示法是在连结中使用插入符“^”和上面所提的字符类来表示互补。例如,

任何非a 的字符可写作[ ^ a ],任何非a、b 及c 的字符则写作:
[ ^ a b c ]
(5) 可选的子表达式
有关串的最后一个常见的情况是在特定的串中包括既可能出现又可能不出现的可选部分。
例如,数字前既可有一个诸如+或-的先行符也可以没有。这可用解来表示,同在正则定义中
是一样的:
natural = [0-9]+
signedNatural = natural | + natural | - n a t u r a l
但这会很快变得麻烦起来,现在引入问号元字符r?来表示由r 匹配的串是可选的(或显示r 的0
个或1个拷贝)。因此上面那个先行符号的例子可写成:
natural = [0-9]+
signedNatural= (+|-)? n a t u r a l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lujunql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值