我正在尝试从ec2的主机名中获取动态变量。主机名遵循这种模式
us-east-1b-application-type-environment-138-10.domain.com
我希望我的变量最终看起来像这样
application-type-environment
使用此
$variable = regsubst($hostname, '/[a-z]{1}[0-9]{1}-([^-]+)-[0-9]{1,3}/', '')
我最终得到了这个
us-east-1b-application-type-environment-138-10
我怎样才能得到预期的结果?
答案 0 :(得分:2)
regsubst
中不需要正则表达式分隔符。您需要匹配整个字符串才能删除它,并且只保留您需要的内容。技术包括匹配您不想保留的内容以及匹配和捕获您想要的结果。
您可以使用
regsubst($hostname, '^[^0-9]*[0-9][a-z]-(.*?)-[0-9]{1,3}.*$', '\1')
我认为你正试图弄清楚第一个[数字] [小写字母]块和三位数块之间的内容。
表达式的细分:
^
- 行首(如果是字符串的开头,则替换为\A
)[^0-9]*
- 0个或更多个非数字符号(除数字外,全部可以替换为\D*
)[0-9][a-z]-
- 一个数字后跟一个小写字母后跟-
(与\d[a-z]
相同)(.*?)
- 匹配并捕获任何字符,但在最接近之前尽可能少地换行...... -[0-9]{1,3}
- 1到3位数字(与\d{1,3}
相同).*$
- 0个或更多任何字符,但换行符直到行尾(如果表示字符串结尾,则替换为\z
)。