“正则表达式”的应用范围越来越广,有了这个强大的工具,我们可以做很多事情,如搜索一句话中某个特定的数据,屏蔽掉一些非法贴子的发言,网页中匹配特定数据,代码编辑框中字符的高亮等等,这都可以用正则表达式来完成。

工具/原料

  • 电脑
  • 易语言编程软件

方法/步骤

  1. 1

    与DOS下的通配符类似

    其实,所谓的“正则表达式”,是大家一直在使用的,记得吗?在搜索文件时,会使用一种威力巨大的武器——DOS通配符——“?”和“*”。这就是最常用的正则表达式。例如:

     

    123.*  表示所有文件名为123的文件,如123.txt, 123.doc, 123.wps, 123.swf, 123.xls等。

     

    “中国?.doc”表示所有文件名类似于 中国1.doc、中国2.doc、中国x.doc 这样的文件。

    上述DOS下的通配符用“?”号代表一个字符,“*”号代表任意个字符,但在正则表达式中,可能这些都有些改变。如“*”号匹配的就不一样。下面看看正则表达式是如何规定的吧。

  2. 2

    初步了解正则表达式的规定

    正则表达式正是在“DOS通配符”基础上复杂化而得到的。其最常用的表达式可能是:

     

    *   匹配0或多个正好在它之前的那个字符。例如a*意味着能够匹配任意数量的a字符

     

    .  匹配任何单个字符。例如r.t匹配这些字符串:rat、rut、r t,但是不匹配root

    (等同于DOS通配符下的?号。)

     

    ^ 匹配一行的开始。例如^When 能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"。

     

    $ 匹配行结束符。例如正则表达式weasel$ 能够匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。 

     

    在这些字符中,可以使用 \. 来表示 . ,\* 表示 * ,不过,这种情况出现得很少,如果不能理解,可以暂时不理它,到用的时候就明白了。

     

    正则表达式还有一个强大的符号:[  ],这个 [  ]所括的内容,可以不按顺序进行匹配。如

     

    [abc]   匹配abc, acb, bac, bca, cab, cba这6个文本

     

    [0-9]   匹配任意0到9的数字

     

    [a-z]   匹配所有小写字母

     

    [A-Z]  匹配所有大写字母

     

    当然,你可以把它们混在一起写成[a-z0-9]这种样子。

     

    很多时候,我们需要检查文本中的非数字,我们就可以使用 ^ 这个符号,表示“除了……”

     

    [^0-9]  匹配所有非数字文本

     

    [^a-zA-Z]  匹配所有非字母的文本

     

    [^FONT]  匹配所有不含FONT的文本

  3. 3

    *

    前面元素出现0次以上

    .

    匹配任何单个字符

    ?

    前面元素出现0次或1次

    +

    前面元素出现1次以上

    ^

    表示开头。

    $

    表示结尾。

    .*

    表示0个以上的任意字符。

    [ ]

    范围描述符。[a-z]表示从a到z之间的任意一个。

    \w

    英文字母和数字。即[0-9 A-Z a-z]。

    \W

    非英文字母和数字

    \s

    空字符,即[\t\n\r\f]。

    \S 

    非空字符。

    \d

    数字,即[0-9]。

    \D

    非数字。

    \b

    词边界字符(在范围描述符外部时)

    \B

    非词边界字符

    \b

    退格符(0x08)(在范围描述符内部时)

    {m,n}

    前面元素最少出现m次,最多出现n次

    |

    选择

    ( )

    群组

    其他字符

    该字符本身

  4. 4

    基本的规则这些也就够了。下面将讲一讲易语言中正则表达式的数据类型和几个相关命令,相关的数据类型有两个:正则表达式和搜索结果。如下图所示:

  5. 5

    第1个正则表达式程序

    新建一个易语言程序,界面设计如下图所示:

  6. 6

    按钮被单击事件代码如下:

    .局部变量 正则表达式1, 正则表达式

     

    正则表达式1.创建 (“A.C”, 假)

    编辑框2.内容 = 到文本 (正则表达式1.匹配 (编辑框1.内容))

    如下图所示:

  7. 7

    在这里,“正则表达式1”是一个正则对象,使用“创建”方法建议了一个“A.C”正则表达式,然后与编辑框1中的内容进行正则比较,最后得出结论。

    运行后,大家只要输入三个字符,前为A后为C都会返回真。如下图所示:

  8. 8

    但如果是小写或多于三个字符,那么返回就会是假。如下图所示:

  9. 9

    大家也许会问,这样匹配有意义吗?我只能说,有没有意义只在于你怎么用了,如:可用于程序加密时,不采用判断语句,也不采用循环语句,而是用正则去匹配是否注册成功,以及可以进行程序名称的检查,程序中一些文字的检查等,这可能让一些不会正则的破解者很难下手。

  10. 10

    第2个正则表达式例程

    通过第一个正则程序,大家会了解正则匹配的重要性,也了解了易语言正则支持库的基本使用方法,下面这个例程可以让大家了解正则会返回一些更多的内容,大家如何去取回这些信息呢。下面改动上述程序中的一些代码为以下:

    .局部变量 正则表达式1, 正则表达式

    .局部变量 搜索结果1, 搜索结果, , "0"

     

    正则表达式1.创建 (“A.C”, 假)

    搜索结果1 = 正则表达式1.搜索全部 (编辑框1.内容)

    编辑框2.内容 = 搜索结果1 [1].取匹配文本 (编辑框1.内容, )

    改动后如下所示:

  11. 11

    在这里,增加了一个搜索结果的对象,用这个对象接收正则表达式匹配的结果,然后从中提取出大家想要的数据。

    上述易语言代码的运行结果如下图所示

  12. 12

    改动上面编辑框的内容后,结果如下:

  13. 13

    这次是较为重要的一环,即我们知道了取回的内容。即由A和C包含的内容。以及下面会论述到的位置信息。取回的包含的内容意义重大,如:可以取回一对括号内的内容,这也是为了查找的方便。

  14. 14

    第3个例程

    这次的工作任务是取一批文字中的所有字母与数字内容。

    按钮被单击事件代码如下:

    .局部变量 正则表达式1, 正则表达式

    .局部变量 搜索结果1, 搜索结果, , "0"

    .局部变量 数组索引, 整数型

     

    正则表达式1.创建 (“[a-z0-9” + #换行符 + “]”, 假)

    ' [ ]中间的内容,就是要搜索的内容,可以是任意字符,包括换行、空格、特殊符号.但注意如果有字符"^",就表示"除了",如"[^abc]"表示"除了abc",现在,我们给出的表达式意思是匹配含字母、数字、换行符的文本,后面那个"假"意思是不区分大小写,你写成真也没有问题。

    搜索结果1 = 正则表达式1.搜索全部 (编辑框1.内容)

    ' 搜索结果是个数组,实际上存放的是字符串搜索后的各种参数,例如位置等, 可以用"取匹配文本(,)"方法将其取出,注意它的第一个参数必须和"搜索全部()"的参数一致

    编辑框2.内容 = “”

    .计次循环首 (取数组成员数 (搜索结果1), 数组索引)

        编辑框2.加入文本 (搜索结果1 [数组索引].取匹配文本 (编辑框1.内容, ))

    .计次循环尾 ()

    图片如下所示:

  15. 15

    运行后,大家可以在上面的编辑框中输入中文与字母数字的混合,点击按钮后,就可以从中提取出字母与数字了。运行效果如下图所示:

  16. 16

    一个小型的正则工具

    在这里,大家将学会制作一个小型的正则表达式工具,使用这个工具进行下面章节更加细致的学习。

    程序界面如下所示安排:

  17. 17

    按钮被单击事件的代码如下:

    .局部变量 正则表达式1, 正则表达式

    .局部变量 搜索结果1, 搜索结果, , "0"

    .局部变量 位置1, 整数型

     

    正则表达式1.创建 (组合框1.内容, 假)

    .如果真 (正则表达式1.是否为空 () = 真)

        连续赋值 (“”, 编辑框A.内容, 编辑框B.内容, 编辑框C.内容, 编辑框D.内容, 编辑框2.内容)

        返回 ()

    .如果真结束

    编辑框2.内容 = 到文本 (正则表达式1.匹配 (编辑框1.内容))

    搜索结果1 = 正则表达式1.搜索全部 (编辑框1.内容)

    .如果真 (取数组下标 (搜索结果1, ) = 0)

        连续赋值 (“”, 编辑框A.内容, 编辑框B.内容, 编辑框C.内容, 编辑框D.内容, 编辑框2.内容)

        返回 ()

    .如果真结束

    编辑框A.内容 = 搜索结果1 [1].取匹配文本 (编辑框1.内容, 位置1)

    编辑框B.内容 = 到文本 (位置1)

    编辑框C.内容 = 到文本 (位置1 + 取文本长度 (编辑框A.内容))

    编辑框D.内容 = 到文本 (取文本长度 (编辑框A.内容))

    抓图如下:

  18. 18

    通过上述代码后,运行效果如下:

  19. 19

    上述是测试“匹配”方法中注释的内容:

    正则表达式.创建 (“易语言4\.0(模块|支持库)?”)

    信息框 (正则表达式.匹配 (“易语言4.0支持库”), 0, )

    END

注意事项

  • 下标从0开始还是从1开始,因当前编程语言的不同而可能不同。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。