【Linux基础】正则表达式
1.正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。常用用途如下:
(1)字符串是否包含某子串
(2)匹配子串替换
(3)取出符合某条件子串
正则表达式测试工具:百度网盘 提取码: w8bt
2.普通字符
包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号(非特殊字符)。
3.特殊字符
匹配特殊字符使用反转义 \ ,例如匹配 {} ,使用 \{和\} 。
(1)限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。
* 前面一个子表达式,匹配零次或一次或多次。 + 前面一个子表达式,匹配一次或多次。 ? 前面一个子表达式,匹配零次或一次。 {n} 前面一个子表达式,匹配n次(n为正数)。 {n,} 前面一个子表达式,最少匹配n次(n为正数)。 {n,m} 前面一个子表达式,最少匹配n次,最多匹配m次(n<=m,且为正数)。
例1:zo*表示第一个字符为z,后续无字符或有一个或有多个o。可匹配字符串为z zo zoo zoooo等。
例2:zo+表示第一个字符为z,后续有一个或多个o。可匹配字符串为zo zoo zoooo等,无法匹配z。
例3:zo?表示第一个字符为z,后续无字符或有一个o。可匹配字符串为z zo。
例4:zo{2}表示第一个字符为z,后续有两个o。仅可匹配zoo,无法匹配z、zo、zooo、zoooo等。
例5: zo{2,}表示第一个字符为z,后续至少有两个o。仅可匹配zoo、zooo、zooooo等,无法匹配z、zo。
例6: zo{2,3}表示第一个字符为z,后续有两个o或三个o。仅可匹配zoo、zooo,无法匹配z、zo、zooooo等。
(2)定位符
限定某些字符出现的位置,且不能与限定符同时使用。有^或$或\b或\B共4种。
^ 行级,限定字符串以***开头。先写 ^ 后写限定字符串。当写为[^..]形式时不为定位符,表示为非。 $ 行级,限定字符串以***结尾。先写限定字符串后写 $ 。 \b 单词级,限定单词以***开头,或以***结尾。 \B 单词级,限定单词不以**开头,或不以***结尾。
例1:^a表示匹配以a开头的行。[^a]表示非a
例2:er$表示匹配以a结尾的行。
例3:er\b表示匹配以er开头的单词,\ber表示匹配以er结尾的单词。
例4:er\B表示匹配中间或者结尾含er的单词(yera、order),\Ber表示匹配中间或者开头含er的单词(yera、era)。
参考文档:1.9定位符
(3)其它特殊字符
. 表示匹配除换行符以外的任意单个字符 \w 匹配字母或数字或下划线 \W 匹配非字母且非数字且非下划线 \d 匹配数字 \D 匹配非数字 s:匹配任意的空白符 \S 匹配非空白符 | 表示为或者,两项中取一项 () 小括号表示匹配括号中全部字符(限定符可限定小括号中全部字符) [] 中括号表示匹配括号中一个字符 范围描述 如
例1:匹配银行卡号是14~18位的数字:^d{14,18}$
例3:匹配电话号码以固定3位开头+8位数字:^(130|131|132|155|156|185|186|145|176)\d{8}$
例4:匹配电话号码以固定3位开头+8位数字:^((13[0-2])|(15[56])|(18[5-6])|145|176)\d{8}$
例5:匹配某一个数字[0-9],匹配某一个小写字母[a-z],匹配某一个大写字母[A-Z],匹配字母和数字[0-9 a-z A-Z],匹配数字1或5或6 [156]
(4)常见正则表达
匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g // 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? sql语句:^(select|drop|delete|create|update|insert).*$ 1、非负整数:^\d+$ 2、正整数:^[0-9]*[1-9][0-9]*$ 3、非正整数:^((-\d+)|(0+))$ 4、负整数:^-[0-9]*[1-9][0-9]*$ 5、整数:^-?\d+$ 6、非负浮点数:^\d+(\.\d+)?$ 7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$ 9、负浮点数:^(-((正浮点数正则式)))$ 10、英文字符串:^[A-Za-z]+$ 11、英文大写串:^[A-Z]+$ 12、英文小写串:^[a-z]+$ 13、英文字符数字串:^[A-Za-z0-9]+$ 14、英数字加下划线串:^\w+$ 15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ 16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$ 17、邮政编码:^[1-9]\d{5}$ 18、中文:^[\u0391-\uFFE5]+$ 19、电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$ 20、手机号码:^((\d2,3)|(\d{3}\-))?13\d{9}$ 21、双字节字符(包括汉字在内):^\x00-\xff 22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数) 23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/> 24、匹配空行:\n[\s| ]*\r 25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)? 26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)? 28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+) 29、提取信息中的中国手机号码:(86)*0*13\d{9} 30、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8} 31、提取信息中的中国电话号码(包括移动和固定电话):(\d3,4|\d{3,4}-|\s)?\d{7,14} 32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5} 33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+ 34、提取信息中的任何数字 :(-?\d*)(\.\d+)? 35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+) 36、电话区号:/^0\d{2,3}$/ 37、腾讯QQ号:^[1-9]*[1-9][0-9]*$ 38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
参考文档:正则表达式简单语法及常用正则表达式