正则简单介绍

正则简单介绍

什么是正则呢? 正则是一种文本处理的库。它是按照必定的规则处理字符串,获得咱们想要的结果。现代社会很大一部分信息是以文本形式呈现的,掌握正则,你能玩转文本的世界,大有可为。 正则的本质: 按照必定规则处理文本的类库,其实咱们也能够用你熟悉的语言去重写制定规则,写一个文本处理的类库。 正则类库 经常使用的正则库有pcre,posix等等。学会使用一种库,明白他的思想,你很容易学习另一种库,他们语法差异不是太大。咱们这里以preg为例, 正则是一种规则,遵循规则作事就能获得你想要的。 正则的学习 合适的学习工具让你事半功百: 推荐RegexTest 学习正则前得有一个观念: 正则的规则能够标识一切的文本。 正则的基础元字符: 基本字符 除换行符外的任意字符 \w 字母数字下划线或汉字 \s 空白符 \d 匹配数字 \b 开始或者结束 ^ 字符串开始 $ 字符串结束 量词 -范围 [] 括号中的任意字符 + 1个以上 * 任意个数的 ? 有或者没有 {m} m个 {m,n}m到n个 {m,}m以上个 量词表示数量java

基本字符能够表示单个的全部的字符串。 咱们能够说说字符串的组成,好比java这个字符串就是由四个字符 j a v a组成的 最直接的表示java 直接这么写就行。看到没这样就行 咱们能够用基本字符表示为:\w\w\w\w 若是使用量词,\w+ 更清晰的表示\w{4}正则表达式

元字符加上量词你就能描述全部的字符串啦。工具

咱们再进一步。若是要从字符串中找到 javajavejevejavejbvbjsvs 中找到jave,java,jeve这三个字符串呢? 能够用到方括号了:j[ae]v[ae]学习

你能够选择方括号里面的任意一个字符串。 若是不想匹配java,只想匹配其余的相似的字符串:j[^a]v[aebs]测试

^标识否认的 例如数字为[\d] 非数字[^\d]code

若是说[]标识或那么()表示且了,()别名叫分组 好比咱们要找到j后面紧跟ave三个单词的字符j(ave)ci

特殊的状况加入字符串javajave[jevejave 含有[这个字符串咱们应该如何表示呢? 没错这个时候就必须用上转义符号\,好比[在正则里面表示为[了。文档

量词里面又会分为贪婪,懒惰模式 *? +? ?? {n,m}? {n}?加上一个问号就成了懒惰模式,尽可能少的匹配 javajavejevejavejbvbjsvs 好比 jav.下是整个串 jav.?加上问号后是javajavejevejave字符串

掌握了上述的语法你就可以熟练的使用正则啦。 什么邮箱验证,什么电话号码验证,什么其余的都是浮云啦。基础

更进一步更多的规则 捕获 测试字符串:javajavejavajevejavejbvbjsvs (exp)一个括号表明一个分组,捕获文本到分组里面 正则(java)(.)(java) 都在分组里面 (?<name>exp) 捕获的分组名称为<>里面的字符串 (java)(?<ssss>.)(java) 给分组命名为ssss (?:exp)不捕获分组 (java)(?:.*)(java)再也不捕获分组

反向引用 好比我要匹配javajavejavajevejavejbvbjsvs java与java中间的字符串 你能够java(.)java 你也能够(java)(.)\1 匹配第一个分组匹配到的文档 \n标识第n个分组

零宽断言 i'm sing while you're dancing (?=exp) 匹配exp前面的部分 以ing结尾的字符 \b\w+(?=ing\b) (?<=exp)exp匹配exp后面的位置 以s开头的字符(?<=s)\w+\b (?!exp) 匹配后面不能匹配exp的 \b((?!ing)\w)+\b (?<!exp)匹配前面不能匹配exp的 \b((?!you)\w)+\b

掌握上边一些特性依旧掌握了正则的百分之八十了。

此外还有正则表达式的经常使用模式了。 i 忽略大小写 m 多行匹配 s 点号通配模式 U 懒惰模式 D结尾限制模式 u 支持UTF-8转义表达

相关文章
相关标签/搜索