首页 > 代码库 > 分分钟解决正则表达式

分分钟解决正则表达式

正则表达式在各种不同的语言中都有涉及到,但是因为其与普通语法有着较大的差异,所以会给人难懂的第一印象。本文主要讲解正则表达式的基本语法与实际应用,最后还会为大家介绍一下能提高正则表达式使用效率的软件。

 

初印象:“/([A-Z])\w+/”   这是什么?这就是一个正则表达式了,其删选出内容中的大写字母开头的单词,实际效果点击这里

正则表达式的主要功能是对内容的筛选。

格式:双斜杠,/xxxxx/,内部为正则表达式。

建议大家边学习边在这个网页上验证实际效果:没错,点这里

 

 

起步了

(1):最简单的匹配是单个字母的匹配,“/w/”匹配出内容中含有w的地方,“/liufeng/”匹配出内容包含“liufeng”的地方。

(2):稍微复杂一点点,[Ll]iufeng,f方括号内部的条件只要满足其一就可以了,所以可以匹配内容中的Liufeng与liufeng;  [a-c]匹配‘a’或‘b’或‘c’; ‘.‘匹配除了换行符之外的任何内容。

(3):"\b" :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中"This is Regex"匹配单独的单词 "is" 正则就要写成 "\bis\b"  

    \b 不会匹配is 两边的字符,但它会识别is 两边是否为单词的边界。

    “\s”:匹配空格(whitespace);

    “\d”:匹配数字,等效于"[0-9]";

    "\w":匹配字符;

  • /u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字)
  • /i 表示不区分大小写(如果表达式里面有 a, 那么 A 也是匹配对象)
  • /s 表示将字符串视为单行来匹配

  那当我想要查找的就是这些特殊的字符怎么办?    用‘\’。  ‘\’能够去除符号的特殊含义,如“\\d\+”就能匹配到 “\d+”

  将上述字母写为大写后就会获得相反的效果,如“/D”会筛选得到除了数字的内容。

 

(4):多次匹配:注意是将符号左方的内容多次匹配。"abc+" 匹配“abc”,“abccccc”。"(an)+" 匹配 “ananan”。

  • * (zero or more times)
  • + (one or more times)
  • ? (zero or one time)
  • {n} (exactly n times)
  • {n,} (at least n times)
  • {n,m} (at least n times but no more than m times)
  •  | (or)   

 

(5):^:匹配开头,$匹配结尾。

  当你想要找到注释是就可以这样做: “^\\s+ (.+)s+\\$”  .

 

(6)捕获分组:

  "(exp)"    匹配exp,并捕获文本到自动命名的组里

  "(?<name>exp)"   匹配exp,并捕获文本到名称为name的组里

  "(?:exp)"  匹配exp,不捕获匹配的文本,也不给此分组分配组号

  以下为零宽断言

  "(?=exp)"  匹配exp前面的位置

  如 "How are you doing" 正则"(?<txt>.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do";

  "(?<=exp)"  匹配exp后面的位置

  如 "How are you doing" 正则"(?<txt>(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing";

  "(?!exp)"  匹配后面跟的不是exp的位置

  如 "123abc" 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果

  "(?<!exp)"  匹配前面不是exp的位置

  如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"

 

参考文章:http://www.cnblogs.com/China3S/archive/2013/11/30/3451971.html

       http://stackoverflow.com/questions/4736/learning-regular-expressions

本文为作者原创,如需转载请注明出处:http://www.cnblogs.com/lflj/

分分钟解决正则表达式