小编cae*_*ras的帖子

确定正则表达式的最短可能匹配

我有一个随机排序的正则表达式数组,如下所示:

let patterns = [
    /foo+ba+r/,
    /foo/,
    /foo+bar/,
    /foobar/,
    /m[eo]{4,}w/,
    /boo/,
    /fooo*/,
    /meow/
]
Run Code Online (Sandbox Code Playgroud)

我不确定这是否可能,但我想编写一个算法,将正则表达式从最不贪婪到最贪婪排序,如下所示:

[
    /foo/,
    /boo/,
    /fooo*/,
    /meow/,
    /foobar/,
    /foo+bar/,
    /m[eo]{4,}w/,
    /foo+ba+r/
]
Run Code Online (Sandbox Code Playgroud)

我想这样的排序可以这样实现:

patterns.sort((p1, p2) { return p1.greediness() - p2.greediness() });
Run Code Online (Sandbox Code Playgroud)

greediness但类中不存在调用的方法RegExpr

理想情况下,该greediness方法将返回至少可能匹配的字符数。IE:

/foo/.greediness() == 3
/boo/.greediness() == 3
/fooo*/.greediness() == 3
/meow/.greediness() == 4
/foobar/.greediness() == 6
/foo+bar/.greediness() == 6
/m[eo]{4,}w/.greediness() == 6
/foo+ba+r/.greediness() == 6
Run Code Online (Sandbox Code Playgroud)

您对这个问题的解决方案是什么?

javascript sorting

7
推荐指数
1
解决办法
267
查看次数

格式化没有这样的文件或目录

我试图使用 C++ 格式实用程序 (std::format)。我试图编译这个简单的程序:

#include <format>

int main()
{
   std::cout << std::format("{}, {}", "Hello world", 123) << std::endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试用 编译时g++ -std=c++2a format_test.cpp,它给了我这个:

format_test.cpp:1:10: fatal error: format: No such file or directory
    1 | #include <format>
      |
Run Code Online (Sandbox Code Playgroud)

我有 GCC 10.2.0

c++ gcc fmt

4
推荐指数
3
解决办法
1277
查看次数

标签 统计

c++ ×1

fmt ×1

gcc ×1

javascript ×1

sorting ×1