正则简单介绍

			正则简单介绍

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

基本字符可以表示单个的所有的字符串。 我们可以说说字符串的组成,比如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]

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

特殊的情况加入字符串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转义表达

转载于:https://my.oschina.net/u/218155/blog/219709

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值