正则表达式和升压。不适用于简单的正则表达式

发布于 2024-10-02 07:37:32 字数 1529 浏览 3 评论 0原文

下面是我的以下代码,

#include <iostream>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
using namespace std;
using namespace boost;

int main() {

    std::string s = "Hello my name is bob";
    boost::regex re("name");
    boost::cmatch matches;

    try{

        // if (boost::regex_match(s.begin(), s.end(), re))
        if (boost::regex_match(s.c_str(), matches, re)){

            cout << matches.size();

            // matches[0] contains the original string.  matches[n]
            // contains a sub_match object for each matching
            // subexpression
            for (int i = 1; i < matches.size(); i++){
                // sub_match::first and sub_match::second are iterators that
                // refer to the first and one past the last chars of the
                // matching subexpression
                string match(matches[i].first, matches[i].second);
                cout << "\tmatches[" << i << "] = " << match << endl;
            }
        }
        else{
            cout << "No Matches(" << matches.size() << ")\n";
        }
    }
    catch (boost::regex_error& e){
        cout << "Error: " << e.what() << "\n";
    }
}

它总是输出没有匹配项。

我确信正则表达式应该有效。

我使用了这个例子

http://onlamp.com /pub/a/onlamp/2006/04/06/boostregex.html?page=3

Below is my following code

#include <iostream>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
using namespace std;
using namespace boost;

int main() {

    std::string s = "Hello my name is bob";
    boost::regex re("name");
    boost::cmatch matches;

    try{

        // if (boost::regex_match(s.begin(), s.end(), re))
        if (boost::regex_match(s.c_str(), matches, re)){

            cout << matches.size();

            // matches[0] contains the original string.  matches[n]
            // contains a sub_match object for each matching
            // subexpression
            for (int i = 1; i < matches.size(); i++){
                // sub_match::first and sub_match::second are iterators that
                // refer to the first and one past the last chars of the
                // matching subexpression
                string match(matches[i].first, matches[i].second);
                cout << "\tmatches[" << i << "] = " << match << endl;
            }
        }
        else{
            cout << "No Matches(" << matches.size() << ")\n";
        }
    }
    catch (boost::regex_error& e){
        cout << "Error: " << e.what() << "\n";
    }
}

It always outputs with no Matches.

Im sure that regex should work.

I used this example

http://onlamp.com/pub/a/onlamp/2006/04/06/boostregex.html?page=3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱殇璃 2024-10-09 07:37:32

来自升压正则表达式

重要

请注意,仅当表达式与整个输入序列匹配时,结果才为 true。如果您想在序列中的某个位置搜索表达式,请使用 regex_search。如果要匹配字符串的前缀,请使用 regex_search 并设置标志 match_continuous。

from boost regex:

Important

Note that the result is true only if the expression matches the whole of the input sequence. If you want to search for an expression somewhere within the sequence then use regex_search. If you want to match a prefix of the character string then use regex_search with the flag match_continuous set.

风追烟花雨 2024-10-09 07:37:32

如果您想将表达式与 regex_match 一起使用,请尝试 boost::regex re("(.*)name(.*)");

Try boost::regex re("(.*)name(.*)"); if you want to use the expression with regex_match.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文