正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述文本模式的字符串。它通过特定的语法规则,允许你匹配、搜索和操作字符串中的内容。
正则表达式可以用来:
- 匹配文本:可以在字符串中查找符合特定模式的文本,如查找邮件地址、电话号码等。
- 文本替换:能够使用匹配到的模式对文本进行替换操作,比如将所有的逗号替换为句号。
- 数据验证:用于验证输入数据的格式,例如检查用户输入的密码是否符合特定规则。
- 分割字符串:可以根据匹配的模式对字符串进行分割,例如根据空格、逗号等分隔符将词句拆分成单词。
正则表达式的通用语法
正则表达式由普通字符(如字母和数字)和特殊字符(用于匹配特定类型的字符或模式)组成。
-- 匹配单个字符
"snm":包含 'snm' 即可匹配
"s|n|m":包含's' or 'n' or 'm'即可匹配
"[snm]":包含's' or 'n' or 'm'即可匹配
"[a-z]":包含字母a-z任意一个即可匹配
"[1-9]":包含数字1-9任意一个即可匹配
'\\':转义字符
'.' :匹配任意单个字符-- 匹配字符类
[[:alnum:]] : 任意字母和数字=>[a-zA-Z0-9]
[[:digit:]] : 任意数字=>[0-9]
[[:lower:]] : 任意小写字母=>[a-z]
[[:upper:]] : 任意大写字母=>[A-Z]
[[:alpha:]] : 任意字母 =>[a-zA-Z]
[[:xdigit:]] : 任意十六进制数字=>[a-fA-F0-9]
[[:blank:]] : 空格和制表符 =>[\\t]
[[:space:]] : 包括空格在内的任意的空白字符=>[\\f\\n\\r\\t\\v][[:cntrl:]] : ASCII控制字符(ASCII 0到31 和 127)
[[:print:]] : 任意的可打印出来的字符
[[:graph:]] : 相对于print,不匹配空格
[[:punct:]] : 非字母、非数字、非ASCII控制字符-- 匹配多个字符
'^S' :必须以S开始
'S$' :必须以S结尾
'^S$':只能是S* 任意个匹配"S*"任意个(可以0)S即可匹配
+ 任意个匹配"S*"任意个(至少1)S即可匹配
? 0个或1个
{n} 指定n个
{n,} 至少n个
{n,m} n到m个
MySQL数据库中的正则表达式
-- regexp为MySQL中正则表达式的关键字
select * from emp where ename
regexp "正则表达式";
C++中的正则表达式
完全匹配match
int main() {
regex re_num("[0-9]*");//用于匹配任意数字串
cout << regex_match("464664841650", re_num) << endl;
cout << regex_match("4646648a41650", re_num) << endl;
return 0;
}
全文搜索search
int main() {
regex re_num("[0-9]*");//用于匹配任意数字串
bool isfind = regex_search("askdgkasg123asdf",re_num);
cout << isfind << endl;
return 0;
}
文本替换replace
int main() {
regex re_num("[0-9]+");//用于匹配任意数字串
string s = "123abc";
cout<< regex_replace(s, re_num, "kkk");
return 0;
}
Python中的正则表达式
简单示例:
pattern = ""
words = input()
re.match(pattern, words)
感谢大家!