正则表达式常见的用法

用途

正则表达式可以用于许多文本处理和搜索任务,常见的用途包括:

  • 数据验证:使用正则表达式验证电子邮件地址、电话号码、身份证号码等格式是否正确。
  • 数据清洗:使用正则表达式清理文本数据,例如去除多余的空格、换行符等。
  • 数据提取:使用正则表达式从文本中提取有用的信息,例如从网页中提取链接、从日志文件中提取错误信息等。
  • 文本替换:使用正则表达式替换文本中的某些部分,例如将所有数字替换为"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)(类似与编程中的运算符),元字符用于控制其前面的普通字符

[]:可能

表示可能出现字符集合

  1. 离散数据 : [abc] 表示可能出现a,b或c;[^abc]表示不出现

  2. 类型数据 :

    字母和数字 : [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

\:转义

  1. 如需要匹配()则使用[\((].*[\))]
  2. 修饰符 ,可以搭配使用

i: ignore - 不区分大小写

g: global - 全局匹配

m: multi line - 多行匹配

  1. \um如[\u4e00-\u9fa5]检验unicode的汉字

特殊

  1. * + ? 分别表示前面的子表达式出现次数为{0,} {1,} {0,1}
  2. .表示匹配除\n以外的字符

在线验证工具

正则表达式在线测试

猜你喜欢

转载自blog.csdn.net/killsime/article/details/135161645