在接触铃心之前我也是一点不懂正则表达式的。然后为了写一些传参功能,我被迫在一个晚上学会了正则表达式——而我的老师,则是百度百科。
按照我的个人感受来说,正则表达式并没有多少的难度,主要还是在于一个人的领悟能力和到底愿不愿意主动的去应用自己所学到的知识。

编辑于2020.2.8 转载请注明作者

正则表达式是个什么玩意

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串

来源:百度百科

简单说,正则表达式就是用来过滤文本的一种逻辑。
好,什么叫做过滤文本呢?我们可以举个非常非常直观的例子。

虽然上文并没有体现出比较明显的文本过滤的特点,但是我们也大概能够明白正则表达式所起到的是个什么样子的作用。

正则表达式是一种表达式,它通过自身的表达式结构,以一个式子代表了无数种符合条件的文本内容。

一种个人认为比较有效的正则学习&转换方式

由于我学习正则就是为了铃心而学的,在学习的时候有意无意的忽略了某些重点内容,只注重于实际的应用。
因此在本篇介绍的时候可能有很多与实际编程相悖的内容,如有冒犯,请多多谅解。

首先,我们打开百度,随便搜索一下正则表达式,我们就可以找到关于它的百度百科。在百度百科中,我们可以轻易的找到正则表达式中的元字符意义。

对,我就是光看这玩意就学会了,因为真的非常非常简单

然后光有这个是不行的,我们还需要百度搜索一下,正则表达式在线测试。(我一般都去菜鸟工具那边,因此我就推荐给大家菜鸟的网站了。)

好,有了这两个网页,我们就可以开始我们的学习之旅了。

再次声明,由于本次教学专门指向铃心自定义,因此会忽略掉类似于开头符结尾符这类铃心中不会使用的符号,感兴趣的同学可以自己去了解一下。

首先,确定要过滤的文本可能

我们以“.bot on”(骰子机器人打开指令)为例。

其次,逐步进行匹配

好,我们列举了几种常见的可能,接下来就要进行伟大的正则表达式转换了。各位同学们请拿起你刚才在百度百科找到的元符号的表,跟我一起来进行对照工作。

然后,测试

简单吧!由于在线正则把(?i)变成了一个叫做忽略大小写的选项,因此实际测试的时候要删掉(?i)然后勾选上那个选项
图中有一个小小错误,在.前未使用\进行转义操作,在此说明

好的,我们写好了我们人生中的第一个正则表达式,现在可以回头捋一下我们的研究过程——

  1. 明确匹配对象且列举匹配的所有可能
  2. 进行逐步代换,不断满足所有可能出现的情况
  3. 在在线测试进行各种情况的试验
  4. 实际测试(我忽略了)

实际的书写中,我们一定要遵守逐步代换的原则,不然很容易缺斤少两,最后导致正则自己都看不懂。

至此,正则表达式讲完了?

没,其实还差的远了,因为我什么都没讲。我只是举了一个小小的实际例子,让大家都跟着我的步骤来写一次正则表达式而已。

那么在这个例子中,我们真正收获到了什么呢?
如同我最开始讲解铃心的变量一样,我没办法挨个给你解析。我只能给你一个非常浅显的例子,告诉你这个东西是怎么怎么分析的,怎么怎么一步步来的,在必要的时候让你少走一些弯路。

而在正则这里,元字符对照表就是铃心的变量表。
每当我们书写正则表达式的时候,请一定记得打开一张元字符对照表以保证自己写的是万无一失的。
根据我们自身的需要,一步步替换掉原本文本中出现的字符串,然后变更为正则表达式——这才是我们应该做的事情。

为什么要花篇幅来讲解正则表达式

因为,你在后面的篇章里,我们的大部分功能都会涉及到参数的传入,以及文本的复杂处理,如果没有正则表达式的话,这个过程会比较的复杂,因此我需要专门揪出来一篇进行正则表达式的讲解。

我知道,肯定很多的同学和朋友看到这里还是对正则表达式一头雾水——比如说经典的匹配身份证号的正则表达式,肯定很多同学不会写。

这里我只能提供给大家几个网址,让大家看看那里的例子,帮助去理解。

史上最全正则表达式(请注意,所有的开头符和结尾符都可以忽略)

常用正则表达式整理(同上,其实内容都是千篇一律的,看一点就好)

菜鸟教程(我自学的时候经常去的网站,只是人家是针对其他语言中的正则应用)

多去尝试,不要仅仅局限于我所说了些什么。
再者说,我弄出来的...其实都非常不规范,说不定你们写的要比我好上千上百倍呢。

上万倍是绝对不可能的。

我什么都不懂,我只会现学现卖,谢谢配合。