gpt4 book ai didi

regex - 如何使用正则表达式解析可变长度命令行参数?

转载 作者:行者123 更新时间:2023-12-01 23:36:55 28 4
gpt4 key购买 nike

我有大量文件,每个文件都包含一个带有可变数量参数的 bash 命令。我需要用相应的 API 调用替换这些。

文件中的示例 bash 命令(注意:“-p”参数的数量各不相同,有些没有):

./some_script.sh http://some.server.com -p a=value -p b=value -p c=value

示例对应的 API 调用
http://some.server.com/api/some/endpoint?a=value&b=value&c=value

我的问题是我似乎无法对每个参数进行分组,因为参数的数量是可变的。

基本正则表达式(这将匹配上面的示例,但只对第一个参数进行分组):
.\/some_script.sh\s([\w\/:\.]*)(\s-\w\s[\w=]*)

我试过:
.\/some_script.sh\s([\w\/:\.]*)(\s-\w\s[\w=]*)*

但是,这似乎只对最后一个参数进行分组。
(使用 regex101 测试)

理想情况下,我希望这个正则表达式能够在这些文件中对无限数量的参数进行分组,以便我可以轻松地将命令重建为 API 调用。

如果需要更多详细信息,请告诉我,欢迎提出任何建议。

最佳答案

在这里,也许我们可以找到另一种方法,并逐步从我们的输入中收集我们想要的数据。然后我们可能会从类似于以下的表达式开始:

.+\.sh.+?(https?:\/\/[^\s]*)|\s+-[a-z]+\s+([\w=]+)
我们的链接在这里:
(https?:\/\/[^\s]*)
和我们的变量:
([\w=]+)
用逻辑 OR 更改。
如果可能,我们还可以修改和添加其他边界或减少我们的边界。
DEMO
测试
此代码段仅显示捕获组的工作方式:

const regex = /.+\.sh.+?(https?:\/\/[^\s]*)|\s+-[a-z]+\s+([\w=]+)/gm;
const str = `./some_script.sh http://some.server.com -p a=value -p b=value -p c=value
`;
let m;

while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}

// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}

正则表达式电路
jex.im 可视化正则表达式:
enter image description here

关于regex - 如何使用正则表达式解析可变长度命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397493/

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