正则表达式
正则表达式(Regular Expression) 正则表达式是一种字符特征的描述方式,用来在文本中匹配到用户想要的东西. 正则表达式与通配符: 1.正则表达式一般用于处理文本内容,常用命令有grep,sed,awk,vim等 通配符一般用于匹配文件名,常用命令有find,ls,cp等 2.各符号的含义不尽相同. 什么地方使用正则表达式 vim grep sed awk nginx apache mail垃圾邮件过滤。。。 perl java python 等等都使用正则 构成 1.元字符(基本元字符、扩展元字符) 2.除元字符之外的任意字符都是表示他字面意思的正则表达式 正则表达式的匹配过程 正则表达式是按照从表达式最左端第一个字符开始,左到右依次一个一个字符进行匹配.当字符串中有字符成功匹配到正则表达式中字符,则从这个位置开始尝试正则表达式中的下一个字符进行匹配,如果匹配成功则继续从这个位置开始匹配正则表达式中下一个字符;如果匹配不成功,则“回溯”到第一次匹配的字符处重新从正则表达式中第一个字符开始匹配。 特征 贪婪匹配 基本元字符 1.字符匹配 ** . 任意单个字符** ** [] []内的任意单个字符** ** [ a-z] 任意单个小写字母** ** [a-zA-z] [0-9] [a-zA-z0-9]** [^0-9]除了数字外的任意当个字符 [a-z]小写字母 [0-9]数字 [A-Z]大写字母 [a-zA-Z]所有字母 [^a-zA-Z0-9]所有符号 次数匹配 ** * 匹配前面的字符重复****0次****到多次 * {****n****}****匹配前面的字符重复任意次数 {n,m}前面的字符重复n次到m次 {,n} 前面的字符最多重复n次 {n,} 前面的字符最少重复n次 ** 位置匹配** ^ 行首 $ 行尾 < 词首 > 词尾 扩展元字符****Extended Metacharacters (egrep and awk) sed -r ?? 前面的字符重复0次或1次 {} 次数匹配意义同基本元素中的{} |或着 () 分组 \数字 引用分组的内容 前向: 在正则中引用 后向: 在其他地方引用, \0表示引用模式中所有的内容 \0 ⇔ & hehello llllo llheo hellhello hellohello 编写正则表达式的3 个步骤****: 1 知道要匹配的内容以及它如何出现在文本中。 2 编写一个模式来描述要匹配的内容 3 测试模式来查看它匹配的内容,不能错,不能漏,不能多 练习: head /etc/passwd > /tmp/pass 1. 删除每行的第一个字符 2. 在每行行首插入hello 3. 删除每行的第二个字符 4. 把每个数字用()括起来 如:(1)(2) 5. 把每个数值用()括起来 如:(12) 6. 删除每行的倒数第二个字符 7. 交换每行的第一个和最后一个字符 8. 删除刚好三个字符的单词 9. 把ro或da替换成A 思考: 1. 删除每行的第一个单词(纯字母) 2. 交换第一个和倒数第二个单词(纯字母) POSIX字符类 点击这里点击这里 [:digit:]任何数字 [:xdigit:]任何十六进制数字 [:alpha:]任何字母 [:lower:]任何小写字母 [:upper:]任何大写字母 [:alnum:]任何字母或数字 [:cntrl:]ASCII控制字符(ASCII 0~31 和 ASCII 127) [:punct:]不属于[:alnum:]和[:cntrl:]的任何字符 [:blank:]空格或制表符([\t ]) [:space:]任何空白字符,包括空格([\f\n\r\t\v ]) [:print:]任何可打印字符 [:graph:]同[:print:],但不包括空格
正则表达式
匹配所有符合规律的内容,并且返回的是一个列表 匹配第一个符合规律的内容,返回一个正则对象 替换符合规律的内容,并返回 可以得到dnot是一个占位的符号 *表答的是前面的元素出现0次或者多次所以 ?是匹配前面的字符一次或者0次 可以控制匹配h的数量 举个例子: 匹配的是1后面占位的3个符号 可以看出re.S将"."的匹配范围扩大到了换行符。原来的"."号是没有换行符的 search的group(1)表示的是第一个括号里的内容 如果有多个括号贼为多个括号里的内容 可以看出来a为一个list而如果每一个list的元素中有多个"()"则每一个list的元素为 一个tuple sub 返回的是一个字符串,并且是将原文匹配的所有改变之后的字符串 sub是将匹配的部分改变并且拼接起来 由于. 是贪婪匹配所以匹配的是整体字符串123aaa123123xxx123 替换成hello 而. ?是非贪婪所以匹配出两个并且拼接hellohello
关于整数的正则表达式如何写?
\d 匹配数字 {n,m} 重复 n 到 m 次 阁下所需的最小两位,最大五位的整数就像这样: \d{2,5}这一整个字符串对应的正则表达示则是这样: \/news\/news_view\.asp\?newsid=\d{2,5}注意上述表达示中,在/ . ? 等这些在正则中有特殊意义的字符之前,都使用了\来转义 另外,如果仅是匹配,而不取出匹配到的数字,可以像上面这样写,如果还要取出来用的话,可以使用“分组”来实现: 分组 在正则表达式中,可以用小括号将一些规则括起来当作分组,分组可以作为一个元字符来看待。 即是这样: \/news\/news_view\.asp\?newsid=(\d{2,5})然后使用逆向引用即可取出该值。 有疑问请再追问