使用正则表达式查找字符串错误

不能理解为何这样一个这个的代码就会报函数已删除的错误

#include 
#include 
#include 

using namespace std;

int main()
{
    regex r;
    try {
        r.assign("[[:alnum:]]+\\.(cpp|cxx|cc)$", regex::icase);
    }catch(regex_error e)
    {
        cout << e.what() << "\ncode: " << e.code() << endl;
    }
    smatch results;
    if (regex_search(string("myfile.cc"), results, r))
        cout << results.str() << endl;
}

img


但是下面这样的代码就可以正常查找,有没有人知道原因为何?

#include 
#include 
#include 

using namespace std;

int main()
{
    regex r;
    try {
        r.assign("[[:alnum:]]+\\.(cpp|cxx|cc)$", regex::icase);
    }catch(regex_error e)
    {
        cout << e.what() << "\ncode: " << e.code() << endl;
    }
    smatch results;
    string s = "myfile.cc";
    if (regex_search(s, results, r))
        cout << results.str() << endl;
}

string参数为右值的regex_search()函数在声明时被标为delete了. 编译器的设置.

#if _LIBCPP_STD_VER > 11
template <class _ST, class _SA, class _Ap, class _Cp, class _Tp>
bool
regex_search(const basic_string<_Cp, _ST, _SA>&& __s,
             match_results<typename basic_string<_Cp, _ST, _SA>::const_iterator, _Ap>&,
             const basic_regex<_Cp, _Tp>& __e,
             regex_constants::match_flag_type __flags = regex_constants::match_default) = delete;
#endif


正则表达式的库有很多,boost里面也有,不行换一个。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/28547
  • 这篇博客你也可以参考下:微信发图时找不到在其他软件上刚保存的图片或视频,但是在手机自带相册里面能看到的解决办法,亲测有效
  • 除此之外, 这篇博客: <代码分享> 一种无人机配合卡车配送的车辆路径规划模型中的 参数与输入数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

  • TSP:

    from datetime import datetime
    import random
    import math
    
    from utils.logger import log_tsp as log
    
    
    dts = datetime.now()
    
    
    # nodes
    NUM_NODE = 50
    NUM_NODE_NAV = 20
    LIST_NODE_UAV = list(range(NUM_NODE - NUM_NODE_NAV + 1, NUM_NODE + 1))
    
    # coordinates
    random.seed(2021)
    RANGE_COORDINATE = (0, 100)
    LIST_COORDINATE = [(random.randint(RANGE_COORDINATE[0], RANGE_COORDINATE[1]),
                        random.randint(RANGE_COORDINATE[0], RANGE_COORDINATE[1])) for _ in range(NUM_NODE)]
    
    # distance
    ORIGIN = (round((RANGE_COORDINATE[1] - RANGE_COORDINATE[0]) / 2),
              round((RANGE_COORDINATE[1] - RANGE_COORDINATE[0]) / 2))
    LIST_COORDINATE_ = [ORIGIN] + LIST_COORDINATE
    MAT_DISTANCE = [[0.0 for _ in range(0, NUM_NODE + 1)] for _ in range(0, NUM_NODE + 1)]
    range_wave = (0.8, 1.2)
    for i in range(0, NUM_NODE + 1):
        for j in range(0, NUM_NODE + 1):
            distance = round(math.sqrt((LIST_COORDINATE_[i][0] - LIST_COORDINATE_[j][0]) ** 2
                                       + (LIST_COORDINATE_[i][1] - LIST_COORDINATE_[j][1]) ** 2)
                             * (range_wave[0] + random.random() * (range_wave[1] - range_wave[0])), 4)
            MAT_DISTANCE[i][j] = distance
    
    # cost
    COST_UAV = 0.2
    
    
    dte = datetime.now()
    tm = round((dte - dts).seconds + (dte - dts).microseconds / (10 ** 6), 3)
    log.info(msg="random data generating time:  {} s".format(tm))
    

    VRP:

    from datetime import datetime
    import random
    import math
    
    from utils.logger import log_vrp as log
    
    
    dts = datetime.now()
    
    
    # nodes
    NUM_NODE = 50
    NUM_NODE_NAV = 10
    LIST_NODE_UAV = list(range(NUM_NODE - NUM_NODE_NAV + 1, NUM_NODE + 1))
    
    # coordinates
    random.seed(2021)
    RANGE_COORDINATE = (0, 100)
    LIST_COORDINATE = [(random.randint(RANGE_COORDINATE[0], RANGE_COORDINATE[1]),
                        random.randint(RANGE_COORDINATE[0], RANGE_COORDINATE[1])) for _ in range(NUM_NODE)]
    
    # distance
    ORIGIN = (round((RANGE_COORDINATE[1] - RANGE_COORDINATE[0]) / 2),
              round((RANGE_COORDINATE[1] - RANGE_COORDINATE[0]) / 2))
    LIST_COORDINATE_ = [ORIGIN] + LIST_COORDINATE
    MAT_DISTANCE = [[0.0 for _ in range(0, NUM_NODE + 1)] for _ in range(0, NUM_NODE + 1)]
    range_wave = (0.8, 1.2)
    for i in range(0, NUM_NODE + 1):
        for j in range(0, NUM_NODE + 1):
            distance = round(math.sqrt((LIST_COORDINATE_[i][0] - LIST_COORDINATE_[j][0]) ** 2
                                       + (LIST_COORDINATE_[i][1] - LIST_COORDINATE_[j][1]) ** 2)
                             * (range_wave[0] + random.random() * (range_wave[1] - range_wave[0])), 4)
            MAT_DISTANCE[i][j] = distance
    
    # cost
    COST_UAV = 0.1
    
    # weight, load
    upper_weight_item = 20
    LIST_WEIGHT = [random.randint(0, upper_weight_item) for _ in range(NUM_NODE)]
    UPPER_LOAD = 100
    log.info(msg="total weight:  {}".format(sum(LIST_WEIGHT)))
    
    
    dte = datetime.now()
    tm = round((dte - dts).seconds + (dte - dts).microseconds / (10 ** 6), 3)
    log.info(msg="random data generating time:  {} s".format(tm))
    

  • 您还可以看一下 AI100讲师老师的朋友圈爆款背后的计算机视觉技术与应用课程中的 朋友圈爆款背后的计算机视觉技术与应用小节, 巩固相关知识点