首页 > 其他分享 >正则表达式regex

正则表达式regex

时间:2024-02-09 18:22:41浏览次数:27  
标签:regex std 匹配 string 字符 正则表达式

目录

参考

regex可以很简单 也可以很复杂

/* 限定符                                           修饰前面的一个字符,可以是元字符
 *                     重复0次或更多次
 +                     重复1次或更多次               []里的+就只是一个"+"字符了           
 ?                     重复0或1次 
 {n}                   重复n次
 {n,}                  重复n或更多次
 {n,m}                 重复n到m次

例:abc* 表示可匹配 以ab 开头后面没有c或有多个c       
  \d{5} 表示\d匹配到的数字连续出现5次

元字符                                                 匹配单个字符
.                      匹配除换行符以外的任意单个字符
^                      表示匹配行首的文本(以什么表达式开始)
$                      表示匹配行尾的文本(以什么表达式结束)
\s                     匹配任意的空白
\S                     匹配任意不是空白符的字符
\d                     匹配数字
\D                     匹配任意非数字的字符
\w                     匹配字母或数字或下划线
\W                     匹配不是字母数字下划线的字符
\b	                   匹配一个单词边界 所谓'单词边界' 请参考https://blog.csdn.net/weixin_42636353/article/details/82466892
\B	                   非字边界匹配。

其他
[]                      匹配其中的任意一个字符  相当于或的意思   [abcd]
[^]                     匹配除了方括号内的字符  相当于取反   [^abcd]
[n-m]                   匹配n到m范围内的任意 一个字符        [0-9] 这是\d的全写       [^0-9] 这是\D的全写 可和其她范围连用  [0-9A-z_]
\                       转义符 转特殊字符为要匹配的字符      \.  匹配.     \\  匹配\  \/ 匹配/
|                       前面一大部分或者后面一大部分    如果要改变范围可用()   如     b(o|a)y    匹配boy bay
[\u4e00-\u9fa5]         匹配汉字

正则表达式还有很多还有待深究

捕获组

  • (组) 这个分组
// 原始字符串,由 '|' 分隔
std::string s = "part1|part2|part3";

// 正则表达式模式,匹配由 '|' 分隔的第二部分
// 我们使用捕获组来保留前后部分
std::regex pattern("(\\w+)\\|(\\w+)\\|(\\w+)");

// 替换字符串,捕获到的用replacement的内容替换 下面这是种拼接
std::string replacement = "$1|new_part|$3";

// 使用正则表达式进行替换
std::string result = std::regex_replace(s, pattern, replacement);
// 输出替换后的字符串
std::cout << result << std::endl;

输出:

part1|new_part|part3

        // 原始字符串
        std::string s = "The quick brown fox jumps over the lazy dog dog";

        // 正则表达式,匹配重复的单词
        std::regex e("(\\b\\w+)\\s+\\1\\b");

        // 替换字符串,其中\\1是一个反向引用,引用了第一个捕获组
        std::string r = "$1"; // 只保留第一个匹配的单词  或者"555"替换 上面的 重复的dog

        // 执行替换
        std::string result = std::regex_replace(s, e, r);

        // 输出结果
        std::cout << result << std::endl;

输出:

The quick brown fox jumps over the lazy dog

反向引用 与 提取数据

  • 上面$1 (这里1是组号 表示第一个组) 就是提取匹配组匹配到的数据
    std::string s = "I have an apple apple2.";
    std::regex e(R"((apple)\s+(apple2))");
    std::string r = R"($2 orange1)"; // 使用$1引用第一个捕获组,即第一个"apple"
    std::string result = std::regex_replace(s, e, r); // 结果将是 "I have an apple orange."
    std::cout<<result<<std::endl;
    
    >.R"()"是CLion编译器提供支持的被其修的字面字符量不需要手动转义转义字符的写法
    输出:

    I have an apple2 orange1.

  • 反向引用
    假设你想在一个字符串中查找连续重复的单词,如"the the"或"is is"。你可以使用以下正则表达式
    std::regex e("(\\b\\w+)\\s+\\1\\b");
    
    上面的 \1 就是反向引用第一组的内容

标签:regex,std,匹配,string,字符,正则表达式
From: https://www.cnblogs.com/ComputerTech/p/18005662

相关文章

  • 无涯教程-RegExp.prototype.toString()函数
    toString方法返回正则表达式的字符串表示形式。RegExp.prototype.toString()-语法RegExpObject.toString();RegExp.prototype.toString()-返回值返回正则表达式的字符串表示形式。RegExp.prototype.toString()-示例varstr="Javascriptisaninterestin......
  • 无涯教程-RegExp.prototype.split()函数
    此方法根据指定的分隔符分割字符串对象,并返回字符串数组。RegExp.prototype.split()-语法str.split([separator[,limit]])separator  - 可选。指定字符串的分隔符。limit      - 可选。指定要找到的拆分数量的限制。RegExp.prototype.sp......
  • 无涯教程-RegExp.prototype.match()函数
    此方法检索匹配项。RegExp.prototype.match()-语法str.match(regexp)Regexp  - 正则表达式对象。RegExp.prototype.match()-返回值返回一个匹配数组,如果找不到匹配项,则返回null。RegExp.prototype.match()-示例varstr='WelcometoES6.Weare......
  • 无涯教程-RegExp.prototype.test()函数
    test()方法在字符串中搜索与正则表达式匹配的文本。如果找到匹配项,则返回true;否则,它返回false。RegExp.prototype.test()-语法RegExpObject.test(string);string  - 要搜索的字符串。RegExp.prototype.test()-返回值如果找到匹配项,则返回匹配的文本,否......
  • 无涯教程-RegExp.prototype.exec()函数
    exec方法在字符串中搜索与正则表达式匹配的文本。如果找到匹配项,则返回输出数组。否则,返回null。RegExp.prototype.exec()-语法RegExpObject.exec(string);string  - 要搜索的字符串RegExp.prototype.exec()-返回值如果找到匹配项,则返回匹配的文本,否则......
  • 无涯教程-RegExp.prototype.sticky函数
    lastIndexRegExp对象的读/写属性。对于设置了"g"属性的正则表达式,它包含一个整数,该整数指定紧随RegExp.exec()和RegExp.test()方法找到的最后一个匹配项之后的字符位置,这些方法使用此属性作为它们进行下一次搜索的起点。RegExp.prototype.sticky-语法RegExpObject.lastInde......
  • 无涯教程-RegExp.prototype.multiline函数
    multiline是RegExp对象的只读布尔属性。它指定特定的正则表达式是否执行多行匹配,即是否使用"m"属性创建。RegExp.prototype.multiline-语法RegExpObject.multilineRegExp.prototype.multiline-返回值如果设置了"m"修饰符,则返回"TRUE",否则返回"FALSE"。RegE......
  • 无涯教程-RegExp.prototype.ignoreCase函数
    ignoreCase是RegExp对象的只读布尔属性。它指定特定的正则表达式是否执行不区分大小写的匹配,即是否使用"i"属性创建。RegExp.prototype.ignoreCase-语法RegExpObject.ignoreCaseRegExp.prototype.ignoreCase-返回值如果设置了"i"修饰符,则返回"TRUE",否则返回"......
  • 无涯教程-RegExp.prototype.global函数
    global是RegExp对象的只读布尔属性。它指定特定的正则表达式是否执行全局匹配,即是否使用"g"属性创建。RegExp.prototype.global-语法RegExpObject.globalRegExp.prototype.global-返回值如果设置了"g"修饰符,则返回"TRUE",否则返回"FALSE"。RegExp.prototype.......
  • JavaScript的正则表达式
    目录一、概念二、修饰符1.g(global,全局)2.i(ignorecase,不区分大小写)3.m(multi-line,多行)4.s(single-line,单行)5.u(Unicode,Unicode字符)6.y(sticky,粘性)三、元字符1..(匹配非换行符\n的任意一个字符)2.\d(匹配数字)3.\D(匹配除数字以外的所有字符)......