使用REGEX以UTF8格式过滤字符串

Filtering string using regex in utf8 format

本文关键字:过滤 字符串 格式 UTF8 REGEX 使用      更新时间:2023-10-16

我正在尝试过滤逃脱特殊字符并将其转换为小写的字符串。例如:"Good morning!"转换为good morning
我当时将一个字符串传递给我的功能。
我正在成功地过滤英语的字符串,但是当我通过母语的字符串时,我会有问题。
如果要包含所有UTF-8字符,我应该使用哪种类型的正则过滤字符串?

#include <string>
#include <iostream>
#include <regex>
#include <algorithm>
std::string process(std::string s) {
    std::string st;
    std::regex r(R"([^W_]+(?:['_-][^W_]+)*)");
    std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
    std::smatch m = *i;
    st = m.str();
    std::transform(st.begin(), st.end(), st.begin(), ::tolower);
    return st;
}
int main() {
    std::string st = "ąžuolas!";
    std::cout << process(st) << std::endl; // <- gives: uolas
    return 0;
}

您可以使用Regex p{L}p{M}*匹配任何Unicode'字母'字符。

因此,完整的正则是:

((?:p{L}p{M}*)+(?:['_-](?:p{L}p{M}*)+)*)

演示