64H*_*4Hz 2 bash text-processing regular-expression test
目前正在研究一些 RegExp 来解析输入文件以获得正确的内容。我正在使用下面的 RegExp 来解析一些输入:
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(?:-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD))-[a-z]
Run Code Online (Sandbox Code Playgroud)
输入它应该匹配:
cell-80-sandp-sit-a
Run Code Online (Sandbox Code Playgroud)
或者匹配这个:
cell-80-sandp-a
Run Code Online (Sandbox Code Playgroud)
-sit输入的部分应该是一个可选的捕获组,据我所知,这意味着如果没有找到这个捕获组,RegExp 将继续成功,或者如果找到它也会成功完成。
对于这种情况,我将在 if 语句中使用它:
if [[ "$Input" =~ $RegExp ]];
then
#stuff
fi
Run Code Online (Sandbox Code Playgroud)
谁能指出以上有什么问题?我一直在regex101.com用来测试它。
bash 理解标准的扩展正则表达式(“ERE”),而不是 PCRE(“Perl 兼容的正则表达式”)。
您的 PCRE:
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(?:-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD))-[a-z]
Run Code Online (Sandbox Code Playgroud)
所述(?:...)在一个PCRE是非捕获组(未可选基团)。ERE 中没有等价物,所有组都在捕获。
要使表达式可选,您可以使用 限定它?,就像我在下面所做的那样。这?意味着前一个表达式应该匹配一次或零次。
作为 ERE:
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)?-[a-z]
Run Code Online (Sandbox Code Playgroud)
或者,收缩(SIT[a-z]|SIT[1-9])成SIT[a-z1-9],
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD)(-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD))?-[a-z]
Run Code Online (Sandbox Code Playgroud)
您可能还想为此添加锚定:
^cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD)(-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD))?-[a-z]$
Run Code Online (Sandbox Code Playgroud)
...否则它会匹配 somethingcell-...-ablahblah
| 归档时间: |
|
| 查看次数: |
4553 次 |
| 最近记录: |