【问题标题】:Regex: What is the right regex to use in order to match all proxy servers?正则表达式:为了匹配所有代理服务器,正确的正则表达式是什么?
【发布时间】:2015-02-09 22:00:29
【问题描述】:

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

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

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

<% 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 -%>

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

"/^sgproxy\d+/ -%>"

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

我想更改正则表达式,使其影响包括 proxy\d+ 的所有服务器。

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

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

无效。

您能帮我找到正确的正则表达式来匹配主机名中包含“代理”一词的所有服务器吗?

【问题讨论】:

  • 你已经做到了...:/proxy\d+/
  • @hostname 包含什么?你怎么知道它不起作用?这是一个rubular link,显示您的正则表达式工作正常。

标签: ruby bash templates puppet


【解决方案1】:

Puppet uses the same regex as Ruby

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

【讨论】:

    【解决方案2】:

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

    /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 匹配字符串的开头而不是^。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      相关资源
      最近更新 更多