图源:@妄想世界協会_
正则表达式简单语法介绍
元字符
代码 | 含义 |
---|---|
. | 除换行符 |
\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)'