博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初学正则
阅读量:6680 次
发布时间:2019-06-25

本文共 1856 字,大约阅读时间需要 6 分钟。

    最近看到一篇关于“京东定向爬虫“的帖子,觉得好玩,打算学习一下。大致了解了下代码,发现需要用到正则表达式,于是先行简单学习正则。参考了园子里的前辈的博客内容,如有相似,请见谅~

  • 正则简介

      正则表达式就是一种特殊的字符串模式,用来匹配符合规则的字符串。

      在线匹配工具:http://rubular.com/

  • 正则表达式基本语法

      "^":匹配起始位置。("^h":匹配"hello"'、"hi")

      "$":匹配行或字符串的结尾。("^abc$":开始和结尾都是"abc"的字符串,只有"abc")

      "\b":不会消耗任何字符只匹配一个位置,常用于匹配单词边界。

      "\d":匹配数字。("\d{2}":匹配两位数)

      "\w":匹配字母,数字,下划线。

       "\s":匹配空格。

      ".":匹配除了换行符以外的任何字符。

      "[abc]":字符组,匹配包含括号内元素的字符。

      ※大写表示反义:"\W"、"\S"、"\D"、"\B"、"[^abc]"

      "*":重复零次或更多。(贪婪)相当于{0,}。

      "+":重复一次或更多次。相当于{1,}。

      "?":重复零次或一次。相当于{0,1}。

      "{n}":重复n次。

      "{n,m}":重复n到m次。

      "{n,}":重复n次或更多次。

      "*?":重复任意次,但尽可能少重复。(非贪婪)

      "+?":重复1次或更多次,但尽可能少重复。

  • 正则表达式—分组

      先举例,要匹配"abba",正则表达式为"([a-z])([a-z])\2\1"。捕获分组,其实就是括号内的内容,后面有相同的内容时,可以对捕获分组进行后向引用,以简化表达式。

      "(exp)":匹配exp,并捕获文本到自动命名的组里。自动命名:\1、\2...

      "(?<name>exp)":匹配exp,并捕获文本到名称为name的组里。对于上述例子,换种写法,"(?<str1>[a-z])(?<str2>[a-z])\k<str2>\k<str1>",也能实现。

  • 初步实战练习

        /^[0-9]*$/                                            

        ##校验纯数字组合

        /^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){15,19}$/                  

        ##以字母开头、可带数字、“_”、“.”的16~20位字符串

        /^[a-zA-Z]{15,}$/                                      

        ##15位以上纯字母的字符串

        /^1\d{10}$/                                                     

        ##11位电话号码

        /^http[s]{0,1}:\/\/.+$/                                    

        ##校验URL

        /^[\u4E00-\u9FA5]+$/                                      

        ##纯中文字符

        /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/             

        ##email地址      zhang.sh@136mail.net

        /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/         

        ##年-月-日

 

  总结,目前一些基本的正则都可以随手写一写,稍微复杂的,分解一下,才能搞懂。还有很多更复杂的表达式,看了也是头昏脑涨,尤其在贪婪表达的那一块,很容易把自己绕到坑里。对于相同的规则,有的人写出的正则就很妙,有的就很普通。有空还是要多看看别人写的正则,多些思路,扩展自己的思维。

 

’End zsh 20160321

 

转载于:https://www.cnblogs.com/SilverBullet/p/5301323.html

你可能感兴趣的文章
有人写了编程建议
查看>>
The Toast in android
查看>>
C#学习笔记(十二):正则表达式
查看>>
Simplified CommonJS wrapper 与 AMD 标准定义模块差异
查看>>
MyBatis有关resultType和resultMap差异
查看>>
猜数字(规律)
查看>>
“脑子快”的程序员更优秀吗?
查看>>
使用脚本实现killproc的功能
查看>>
C语言:字符串读取流读取文件中的数据
查看>>
【Win10 开发】读取PDF文档
查看>>
自定义WCF的配置文件
查看>>
OFTP说明
查看>>
[Phalcon] Phalcon系统默认事件列表
查看>>
安装Xcode主题
查看>>
微信公众平台开发教程(五)自定义菜单
查看>>
talend 连接mysql数据库没有权限
查看>>
Visual Studio 2010打开水晶报表是出现二进制
查看>>
Android 让图片等比例缩放的三种方法
查看>>
Jquery easyui datagrid 删除多行问题
查看>>
android 百度最新地图sdk包怎么去除 放大缩小按钮
查看>>