用途
正则表达式可以用于许多文本处理和搜索任务,常见的用途包括:
- 数据验证:使用正则表达式验证电子邮件地址、电话号码、身份证号码等格式是否正确。
- 数据清洗:使用正则表达式清理文本数据,例如去除多余的空格、换行符等。
- 数据提取:使用正则表达式从文本中提取有用的信息,例如从网页中提取链接、从日志文件中提取错误信息等。
- 文本替换:使用正则表达式替换文本中的某些部分,例如将所有数字替换为"X"。
- 文本搜索:使用正则表达式在文本中搜索匹配的字符串。
正则表达式非常强大,并且可以在许多编程语言和工具中使用,例如 Python、Java、JavaScript、Perl、PHP、C#等。
示例
c++11后可以使用regex库
#include <iostream>
#include <regex>
int main() {
//search
std::string text = "The price is 25-24 56-78 dollars";
std::regex pattern("(\\d+)-(\\d+)");//匹配模式
std::smatch result;//存放结果
while (std::regex_search(text, result, pattern)) {
std::cout << result[0] << std::endl;
text = result.suffix().str();//需要不断更新text以进行下一次匹配
}
//match
std::string email = "[email protected]";
std::regex pattern1("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
if (std::regex_match(email, pattern1)) std::cout << "valid email address" << std::endl;
else std::cout << "invalid email address" << std::endl;
}
语法
正则表达式(Regular Expression : regex)包括普通字符和元字符
主要学习元字符(metacharacter)(类似与编程中的运算符),元字符用于控制其前面的普通字符
[]:可能
表示可能出现字符集合
-
离散数据 :
[abc]
表示可能出现a,b或c;[^abc]
表示不出现 -
类型数据 :
字母和数字 :
[a-zA-Z0-9_]
与[\w]
同义,\W
表示不出现空白字符 :
[ \f\n\r\t\v]
与\s
同义;数字 :
[0-9]
与\d
同义组合使用,如匹配qq号
[1-9][0-9]{4,}
{}:限定
限定重复出现的次数
{n}
出现n次
{n,}
出现n次及以上
{n,m}
出现n到m次例如o{2}表示出现两次o
():分组
例如Windows(?=95|98|NT|2000)能匹配windows98中的windows
变式应用
1️⃣将=换成!表示排除括号内的 如(?!=95…)
2️⃣ 等号前面加<表示逆序匹配,如(?<=95|98|NT|2000)Windows能匹配windows98中的windows
\:转义
- 如需要匹配()则使用
[\((].*[\))]
- 修饰符 ,可以搭配使用
i: ignore - 不区分大小写
g: global - 全局匹配
m: multi line - 多行匹配
- \um如
[\u4e00-\u9fa5]
检验unicode的汉字
特殊
* + ?
分别表示前面的子表达式出现次数为{0,} {1,} {0,1}
.
表示匹配除\n以外的字符