首页 > 代码库 > 分分钟解决正则表达式
分分钟解决正则表达式
正则表达式在各种不同的语言中都有涉及到,但是因为其与普通语法有着较大的差异,所以会给人难懂的第一印象。本文主要讲解正则表达式的基本语法与实际应用,最后还会为大家介绍一下能提高正则表达式使用效率的软件。
初印象:“/([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/
分分钟解决正则表达式