gpt4 book ai didi

c++ - 使用 Boost 的正则表达式标记化仅获取单词的最后一个字母

转载 作者:行者123 更新时间:2023-11-28 01:07:45 24 4
gpt4 key购买 nike

我正在尝试使用 Boost 解析一个简单的句子结构。这是我第一次使用 Boost,所以我可能做错了。我想做的是只接受这种格式的字符串:

  • 必须以字母开头(不区分大小写)
  • 可能包含:
    • 字母字符
    • 数字字符
    • 下划线
    • 连字符
  • 所有其他字符作为分隔符

因为我不知道我的分隔符是什么字符(可能有很多),所以我试图制作一个对此敏感的正则表达式。唯一的问题是,我只得到每个单词的最后一个字母。这使我相信我的正则表达式是正确的,但我对 boost 的使用却不是。这是我的代码:

boost::regex regexp("[A-Za-z]([A-Za-z]|[0-9]|_|-)*", boost::regex::normal | boost::regbase::icase);
boost::sregex_token_iterator i(text.begin(), text.end(), regexp, 1);
boost::sregex_token_iterator j;
while(i != j){
cout << *i++ << std::endl;
}

我根据在 Boost website 上找到的内容建模了这个.我使用最后一个示例(在页面底部)作为构建 mf 代码的模板。在这种情况下,文本是字符串类型的对象。

我的正则表达式正确吗?我是否正确使用了 boost?

最佳答案

将您的正则表达式更改为:([A-Za-z][-A-Za-z0-9_]*)

通过将括号放在整个表达式周围,将捕获整个内容,而不仅仅是匹配的最后一个字符。将 - 放在前面会使其成为匹配字符而不是范围说明符。

关于c++ - 使用 Boost 的正则表达式标记化仅获取单词的最后一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com