正则表达式
正则表达式
定义##
是用来操作和检验字符串数据的一种强大工具,是采用某种模式去匹配一类字符串的一个公式。
用正则表达式可以用来方便地验证字符串是否符合指定特征、查找和提取相应字符串、替换文本等等。
规则
- 若表达式只使用单一普通字符,表达式只匹配与之相同地一个字符(字母,数字,汉字,下划线,以及没 有特殊定义的标点符号)。
- 若需要匹配多种字符,可以使用\d,\w,\w,.等表达式来匹配。值得注意的是当需要匹配的字符为特殊字符,需要使用转义字符“\”,在前面加""后,代表该符号代表本身。
- 第三种方式是自定义规则,使用方括号[]包含一系列字符可以匹配其中任意一个字符;用[^]包含一系列字符,则能够匹配[]其中字符之外的任意一个字符。
- 当需要匹配的字符串是重复出现的,具有相同规律的。这时候可以使用第三条规则中[bcd][bcd]来匹配bcdbcd,而这样表达式显得臃肿不方便,所有在表达式后面可以加{2}来表示重复匹配的次数。{n},{m,n}{m,}这三种表达式表示重复n次至少m次,至多n次。至少重复m次。?,+这两种表达式相当于{0,1},{1,}。*表达式表示不出现或出现任意次。这里先有印象。
- 正则表达式中还可以加逻辑表达式"|"表示或者的意思,^表示与字符串开始的地方匹配,不匹配字符;$表示与字符串结束的地方匹配,不匹配字符;()有两种含义:(1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到。
- 在修饰匹配次数的特殊符号后再加上"?"号,可以使匹配次数不定的表达式尽可能少的匹配。
- 反向引用"\1"引用第1对括号内匹配到的字符串.
正如所看到的一样,正则表达式的规则有很多,有简单匹配的,贪婪与非贪婪模式的,反向引用》>的。需要多次练习,熟能生巧。以后可以对照下图来练习。
练习
QQ号码
首先尝试写一个qq号码匹配,考虑号码的组成为纯数字,最少为4位并且不能从0开始。这三种属性可以根据规则2,3,4,写为[1-9][0-9]{4,}或者[1-9]/d{4,}
HTML标记
Html标记的特点为两边为<,>,内部可为,这里属性可为多个比如还可设置id、class等等。所以用(\S?)可以匹配角标内内容。此时写出的正则式为 <(\S?)>,这样可以匹配出。考虑html中可以多重嵌套,例如
,写出正则式为<(\S)[^>]>。
URL
网络上有很多不同版本,比如[a-zA-z]+://[^\s]*,但是在stackoverflow有一个比较好的版本,IP地址、前后有汉字、带参数的。(https?|ftp|file)😕/[-A-Za-z0-9+&@#/%?=_|!:,.;]+[-A-Za-z0-9+&@#/%=_|]。
posted on 2019-04-28 15:39 20189214李熹桥 阅读(105) 评论(0) 编辑 收藏 举报