Linux&MySQL 正则表达式
来源:互联网 发布:我国的顶级域名 编辑:程序博客网 时间:2024/06/06 13:55
Linux 和 MySQL中的正则表达式是不一样的,特别容易混,以下分别记录Linux和MySQL的正则表达式的规则。
1.Linux shell 脚本的正则表达式:
————————————————————————————————————
先区分两个概念:
Linux中正则表达式与通配符:
@ 通配符用来匹配系统中符合条件的文件名,是完全匹配。ls,find,cp这些命令是支持通配符匹配的。
通配符有三种:*,?,[]
例: find /root/tmp -name zh*
find /root/tmp -name zh???
find /root/tmp -name zh[abc]
@ 正则表达式用来在文件中匹配符合条件的字符串,是包含匹配。grep,awk,sed等命令可以支持正则表达式。
————————————————————————————————————
基本的正则表达式:
(1)“ * ”:前一个字符匹配0次,或任意多次 ,例:
grep "a*" test_rule.txt #匹配所有内容,包括空白行
grep "a**" test_rule.txt #匹配至少包含有一个a的行
grep "aaa*" test_rule.txt #匹配至少包含有两个a的行
grep "aaaaa*" test_rule.txt #匹配至少包含有四个a的行
(2)“ . ”:匹配除了换行符外任意任意一个字符,例:
grep "s..d" test_rule.txt #"s..d"会匹配在s和d这两个字母之间有两个字符的单词
grep "s.*d" test_rule.txt #匹配在s和d之间有任意字符的单词
grep ".*" test_rule.txt #匹配所有内容
(3)“^”:匹配行首;“$”:匹配行尾,例:
grep "^M" test_rule.txt #匹配以大写字母M开头的行
grep "n$" test_rule.txt #匹配以小写字母n结尾的行
grep -n "^$" test_rule.txt #匹配空白行
(4)“[]”:匹配中括号中指定的任意一个字符,只匹配一个字符,例:
grep "s[ao]id" test_rule.txt #匹配含有said或soid的行
grep "[0-9]" test_rule.txt #匹配含有数字的行
grep "^[a-z]" test_rule.txt #匹配以小写字母开头的行
(5) “[^]”:匹配除中括号的字符以外的任意一个字符,例:
grep "^[^a-z]" test_rule.txt #匹配不用小写字母开头的行
grep "^[^a-zA-Z]" test_rule.txt #匹配不用字母开头的行
(6) “\”:转义字符,例:
grep "\.$" test_rule.txt #匹配以"."结尾的行
(7)“\{n\}”:表示其前面的字符恰好出现n次,例:
grep "a\{3\}" test_rule.txt #匹配a字母连续出现三次的字符串
grep "[0-9]\{3\}" test_rule.txt #匹配包含连续三个数字的字符串
(8)“\{n,\}”:表示其前面的字符至少出现n次,例:
grep "^[0-9]\{3,\}" test_rule.txt #匹配最少用三个数字开头的行
(9)“\{n,m\}”:匹配其前面的字符至少出现n次,最多出现m次,例:
grep "sa\{1,3\}i" test_rule.txt #匹配在字母s和i之间至少有1个a,最多有3个a
2.MySQL的正则表达式
————————————————————————————————————
先要知道like的用法,like用来进行模糊匹配,常用的通配符有:"_"和"%"。
“_”:匹配单个字符
“%”:匹配0个或多个字符
假设现有如下数据库表(mem_info)
name id gender
wang 1 1
wan 2 2
zhang 3 1
select * from mem_info where name like "wan_" #查询出第1行数据
select * from mem_info where name like "%ang" #查询出第1和第3行
select * from mem_info where name like "_a%" #查询出第1和第2行
————————————————————————————————————
(1) ^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
(2) $
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
(3) .
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(4) [...]
字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
(5) [^...]
负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
(6) p1|p2|p3
匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
(7) *
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
(8) +
匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
(9) {n}
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
(10) {n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
例:
查找name字段中以'st'为开头的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP'^st';
查找name字段中以'ok'为结尾的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP'ok$';
查找name字段中包含'mar'字符串的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP'mar';
查找name字段中以元音字符开头且以'ok'字符串结尾的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP'^[aeiou]|ok$';
- Linux&MySQL 正则表达式
- Linux正则表达式-表达式
- MySQL正则表达式
- mysql 正则表达式
- MySQL正则表达式
- MySQL正则表达式
- mysql 正则表达式查询
- MySQL正则表达式
- mysql 正则表达式手册
- MySQL的正则表达式
- mysql 正则表达式
- MySQL正则表达式
- MySQL的正则表达式
- mysql 正则表达式
- mysql的正则表达式
- mysql正则表达式总结
- MySQL正则表达式
- mysql 正则表达式
- ArcEngine之Com释放(2)
- 简历的艺术——潜台词
- 九度oj-1020-最小长方形
- BZOJ-1000 A + B Problem 丧心病狂
- VMVare8.0, Ubuntu14.04安装VMWare Tools找不到内核头文件解决方案
- Linux&MySQL 正则表达式
- Jquery 动画
- 最大网络流的Ford-Fulkerson 算法
- springmvc运行原理
- anti-nim游戏
- centos6.x 安装mysql linux 安装mysql
- Java的基础语法
- Hibernate的单向多对一映射
- oledb