正则表达式:匹配所有代理服务器的正确正则表达式是什么?

Regex: What is the right regex to use in order to match all proxy servers?

我正在为我们的代理农场编写一个人偶模板。

我们在阿姆斯特丹、新加坡、纽约等地设有数据中心。 每个地理位置中的代理都相应地命名,例如: 新加坡的代理名为 sgproxy01-10 ,阿姆斯特丹的代理名为 ams2proxy01-30 等...

在编写这个最终会影响我公司所有服务器的模板时,我想编写一个 "IF Statement",它将仅向名称与我尝试的模式匹配的代理服务器添加特定的行设置。

<% if @hostname =~ /^sgproxy\d+/ -%>
if [ "$(cat $LBMEMFILE)" = "0" ]; then
echo -e "\e[35m Membeship in LB:        Yes"
elif [ "$(cat $LBMEMFILE)" = "2" ]; then
echo -e "\e[35m Membeship in LB:        No $LISTMEMFILE"
<% end -%>

我要设置的正则表达式在第一行:

"<% if @hostname =~ /^sgproxy\d+/ -%>"

在当前配置下,所有主机名以 sgproxy 开头然后是任何其他数字的服务器都将得到这些行。

我想更改正则表达式,以便它会影响包括 proxy\d+ 在内的所有服务器。

我尝试了以下正则表达式:

^??proxy\d+
^..proxy\d+
^*proxy\d+

None 有效。

你能帮我找到正确的正则表达式来匹配主机名中带有单词 "proxy" 的所有服务器吗?

Puppet uses the same regex as Ruby

/proxy\d+/ 应该可以正常工作,Rubular 非常适合快速检查 Ruby 正则表达式。像这样:

不需要匹配整行,可以只匹配部分。也就是说,

/proxy\d+/

会成功的。虽然你还想更精确:

# whether proxies have only letters, digits and underscores in prefix
/\A\w+?proxy\d+/  

# whether proxies can not contain spaces in names 
/\A\S+?proxy\d+/  

旁注:通常最好使用 \A 匹配字符串的开头而不是 ^