正则表达式匹配域3点

时间:2016-07-29 07:29:55

标签: c++ regex hostname

正则表达式的目的是获取一个字符串并列出所有主机名,但只从中获取右边的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

1 个答案:

答案 0 :(得分:1)

如果您想使用正则表达式,则需要限制+仅出现{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

请注意,+量词匹配量化子模式的一次或多次出现,而{0,3} 限制(绑定)量词仅允许匹配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(?!\.))");