软件构造博客(四)

 在这篇博客中,写一下正则语言的使用。

个人理解的正则语言,就是将一些字符串进行特点归类,然后用一种正则将之进行描述并捕捉。事实上,一个最简单的正则语言应该就是一个字符串,这个字符串对与其完全相同的字符串进行描述并捕捉。

然后,是一些基本的概念的讲述:

|:或符号,用来表示一个位置可能出现的数个可能的正则字串,比如正则:a|b,既可以接受a,也可以接受b。

*:重复符号,这个符号前面的一个或一串东西会被重复至少0次。这个东西的特点是可以重复0次,也就是说可能会产生一个空串,比如:(a|b)*,可以接受aaabbb,也可以接受ababab,或者bbb,甚至也能接受一个空串。

+:重复至少依次符号,这个符号会让前面的一串东西重复至少1次。这样有一个好处,就是不会再产生空串,事实上,我个人认为a+和aa*是等价的。+的使用我觉得是相当普遍的,比如,如果我想接受某个字符串,两个单词之间需要使用一个且仅有一个空格进行连接,并且这个字符串至少有一个单词,那么我可以描述成:([a-zA-Z]+ )*[a-zA-Z]+。

.:用来表示任意字符。比如.*,就可以接受所有的串。

?:可以用来描述一个可能存在的字符,比如,如果我想接受http和https两个字符串,那么我可以写成:http(s)?

差不多就是这些,还有一些转义符之类的就不赘言了,实在是太多了。

下面,是一道往年试题的做题过程:

看到这个东西,我们想着先把(2)(3)(4)描述的东西分别实现,再连接起来就行了,所以我做出:

其中,ABC就代表了123,值得注意的是,B中要求0不能作为开头的同时,要保证最小值为5,所以我考虑分类讨论B只有一位和有多位的情况,事实上,应该还有其他思路,不过这样也能写的出来。

再分析一个选择:

这种题我觉得可以考虑去找反例,事实上找反例一般也就几种思路,主要是在重复处做文章,看看在重复时是否会产生一个能出现“aba”这种而另一个不能,或者一个能出现“abb”而另一个不能。

先分析A:注意到前者整个是有*修饰的,而后者不是,所以很简单的可以想到前者可以接受空串,而后者显然不行。

然后是B:这个很简单,\w是所有字类字符,包含大小写字母数字以及下划线。

C是正确的。

D 没有进行详细分析,不过一眼看上去看到了^号,这个符号在[]里面和外面是截然不同的,在里面的话会进行一个取补集的操作,而在外面的话起到一个“开始符”的作用,所以我认为这个是在这里有问题的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值