图源:@妄想世界協会_

正则表达式简单语法介绍

元字符

代码 含义
. 除换行符
\w Word(字母数字下划线汉字)
\s 任意单个空白符
\d 数字
\b 单词结束(EOF,空白字符等)
^ 开始
$ 结束

字符类

代码 范围
[a..b] [a,b]
[avs] {avs}
[avs0-9] {avs}∪[a,b]

重复模式

代码(默认贪婪) 重复次数
? 0,1
+ >=1
* >=0
{n} n
{n,} >=n
{n,m} [n,m]
前述所有模式+? 懒惰匹配

分组

分组按照先序遍历编号

用括号包裹

代码 说明
(exp) 匹配捕获自动编号
(?<name>exp) 匹配捕获到name
(?#comment) 注释

或者

((abc|bca|cab)\s)(abc|bca|cab)+

分组优先

各语言实现

std::regex

找一个

std::string subject("Name: John Doe");
std::string result;
try {
  std::regex re("Name: (.*)");
  std::smatch match;
  if (std::regex_search(subject, match, re) && match.size() > 1) {
    result = match.str(1);
  } else {
    result = std::string("");
  }
} catch (std::regex_error& e) {
    
}

找所有

std::string subject("This is a test");
try {
  std::regex re("\\w+");
  std::sregex_iterator next(subject.begin(), subject.end(), re);
  std::sregex_iterator end;
  while (next != end) {
    std::smatch match = *next;
    std::cout << match.str() << "\n";
    next++;
  }
} catch (std::regex_error& e) {
  // Syntax error in the regular expression
}

替换

std::regex re(R"foo(\b\w+\b)foo");
cout << std::regex_replace("a b c",re,"$0)");

module.re

找一个

> re.search(r"\b((\w*)i)s\b","This is a text.")
> print(re.group(1))
Thi

找所有

> re.findall(r"\b((\w*)i)ng\b","This is a text.")
[('Thi', 'Th'), ('i', '')]

替换

> re.sub(r"(\b)(\w+)(\b)",r"\1(\2)\3","This is a text")
'(This) (is) (a) (text)'

Reference

regular-expressions.info

正则表达式三十分钟入门教程

正则表达式在线测试