正则表达式的目的是获取一个字符串并列出所有主机名,但只从中获取右边的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 :(得分: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(?!\.))");