gpt4 book ai didi

regex - 从字符串中提取可选值

转载 作者:行者123 更新时间:2023-12-04 06:05:46 25 4
gpt4 key购买 nike

所以,假设我有字符串:

aaa -Dprop=var Class arg
aaa Class arg

我想要一个可以提取 arg 的单行(perl、sed、awk,无所谓)和 var (如果它在那里)。具体来说,我想返回
arg var
arg

以下适用于第一个:
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*(-Dprop=([a-z]*)).*Class (.*)|\3 \2|'

但因为 -Dprop=是必需的,它显然不适用于第二个。

但是,如果我将该匹配设为可选:
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*(-Dprop=([a-z]*))?.*?Class (.*)|\3 \2|'

它不适用于第一个,因为我相信这两个 .* s 是贪婪的限定符并且首先匹配 -Dprop 。

如果我让他们不贪婪,它仍然不起作用,但我不确定为什么。
echo "aaa -Dprop=var Class arg" | perl -pe 's|.*?(-Dprop=([a-z]*))?.*?Class (.*)|\3 \2|'

那么,首先,我可以使用哪些正则表达式正确匹配? (我知道我可以将其拆分为多个命令,但我宁愿只有一个)。

最佳答案

也许:

echo "aaa -Dprop=var Class arg"|perl -pe 's|(.*-Dprop=(.*))?.*Class\s*(.*)|$3 $2|'

还要注意\3 最好写成 $3 (警告编译指示会泄露)。

关于regex - 从字符串中提取可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com