正则表达式解析(一)

正则表达式用来描述或者匹配符合一定规则的字符串。正则表单时经常被用来检索或者替换一些特定的字符串。由于经常用到,翻阅资料,做一下小小的总结,以后方便查阅。

其实windows的通配符就可以说是比较简单的正则表达式,通配符包括*和?,*表示任意多个字符,?表示一个任意的字符。例如命令: del /Q  *.* ,表示不提醒的情况下删除当前目录的一切文件(慎重呀)。正则表达式比这复杂的多,当然功能也强大的多。如果要测试自己写的正则表达式,网上有很多工具,也有在线网页,如http://www.51240.com/zhengze/。我们把网页另存为到本地,这样以后就可以离线用了。

  1. 举个小例子。统计一篇英文文章中出现某单词的次数,例如是量词an,我们的正则表达式就是an, 实际去匹配时,会发现连and,hand这样的单词都被匹配了。我们分析量词an一般是前后都是空格,我们可是使用banb这个正则表达式。b是正则表达式中的一个元字符,表示单词的开头或结尾,这样我们就可以精确匹配出量词an了。
  2. . (英文的点号)用来表示除换行符之外的任意一个字符。*(星号)用来表示任意数量,它不表示字符,只表示数量,例如a*,表示任意个连续的字符a。表达式.*,就表示任意个非换行字符。例如我们要匹配an …… apple这样一个短语,我们可以构造表达式an.*apple。PS:+和*类似,但是+至少要有一个,而*没有限制。
  3. d用来匹配一个数字(0到9),0dd就表示要匹配三位数字且开头为0。我们如果要匹配138号段的手机号就可以用138dd……(共8个d)。正则表达式提供表示连续重复的快捷方法{number},number表示要重复的次数,138d{8}等同于上面的表达式。
  4. s用来表示任意的空白字符,空格、换行、制表符、换页符等。w用来匹配数字、字母、下划线其中的任意一个,即A-Z、a-z、0-9和_中的任意一个。例如byw*b,表示已字母y开头的,后跟任意个A-Z、a-z、0-9和_,然后结束。bvw{8}b表示已v开头的9字符单词。
  5. ^表示字符串的开始,$表示字符串的结尾,有点类似b,只不过分开表示了。举个例子,网站对密码的位数和字符类型都是有限制的,这里假如只允许使用字母、数字和下划线。^w{6,18}$就表示必须输入6到18为的密码,且密码字符只能为字母、数字和下划线。
  6. 元字符转义。学过编程语言的都会知道转义字符,如果我们恰恰需要匹配正则表达式的这些元字符,就可以利用。如*表示字符星号,.表示字符点号,yeetrack.com匹配本博客的域名yeetrack.com等等。
  7. 重复字符的表示方法。
    • * 表示重复零次或多次
    • +表示重复一次或多次
    • ?表示出现0次或1次,即最多出现1次
    • {number]表示重复number次
    • {number1,number2}表示重复number1到number2次
    • {number,}表示重复次数大于等于number次
  8. [](中括号)表示匹配其中任意的一个字符,如[abcdefg]表示匹配abcdefg其中的任何一个字符,[<>,.]表示匹配<>,.中的任何一个字符。
  9. 表示字符范围。0-9表示9个数字,A-Z表示大写字母,a-z表示小写字母,当然也可以表示上面三个的子集,3-8表示3、4、5、6、7、8。举个例子,^[A-Za-z]+[0-9]?[aeiou]{2},表示开头必须最少有一个字母,后面是一个可有可无的数字,最后再跟两个任意的元音字母。
  10. | 或运算符,| 在程序语言中表示“或者”的意思,如:
    if (num <= 0 | num >=10)
        echo "数字不在1-9之间";

    如果要匹配123-12345678或(123)-12345678这样的号码,可以写成(d{3})-d{8}|d{3}-d{8},这样就表示区号为3位,号码为8为,区号带不带括号均可的电话号码。

     

    正则表达式解析(二)

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=124