gpt4 book ai didi

c++ - 用 3 个点匹配域的正则表达式

转载 作者:行者123 更新时间:2023-11-30 05:24:29 24 4
gpt4 key购买 nike

正则表达式的目的是获取一个字符串并列出所有主机名,但只获取其中右边的 3 个点。

它有效,但可能会看到脚本选择了主机名的左侧,而不是右侧。

正则表达式

((([a-zA-Z0-9]{1,63}|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\.){1,3}[a-zA-Z]{2,63})

现在

site.com 1.site.com 2.1.site.com 3.2.1.site。 com 4.3.2.1.site.com 5.4.3.2.1.site.com

固定

site.com 1.site.com 2.1.site.com 3.2.1.site.com> 4.3.2.1.site.com 5.4.3.2.1.site.com

最佳答案

如果你想为此使用你的正则表达式,你需要限制 +只有 {0,3}事件,并使用 \b单词边界 (?!\.)在末尾向前看,以确保我们匹配尾随单词边界处的字符串,并且它后面不应该有一个点:

(([a-zA-Z0-9]{1,63}|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\.){0,3}[a-zA-Z]{2,63}\b(?!\.)
^^^^^ ^^^^^^^^

参见 regex demo

请注意 +量词匹配 1 次或多次出现的量化子模式和 {0,3} 限制(绑定(bind))量词只允许将 o 匹配到 3 次。

在 C++ 中,您可以使用原始字符串文字 (R"(<PATTERN>)") 来定义正则表达式以避免过度转义:

std::regex rx(R"((([a-zA-Z0-9]{1,63}|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\.){0,3}[a-zA-Z]{2,63}\b(?!\.))");

关于c++ - 用 3 个点匹配域的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652972/

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