regex - 从命令行提取选项的正则表达式无法按预期工作
问题描述
我正在尝试分析可能包含密码的命令行,并且当我登录命令行时,我不想记录密码,所以我需要用 **** 替换它。
这是命令行示例:
myprogram --first-option 10 --update-password mypassword --another-option
这是“应该”工作的正则表达式(至少对我来说)但不......
.*?--update-password\s+(?<pwd>.*?)(\s+--\w+)?.*
我的问题是命名组“pwd”不匹配任何内容,因为.*?
. 但是,如果我尝试删除? 然后它匹配整行,包括下一个选项。
据我了解?应该告诉引擎它必须匹配直到它找到其他东西,这意味着它应该匹配直到它找到另一个选项(\s+--\w+)
或什么都没有。但它显然不是那样工作的......我想我过去做过很多次,它总是按我想要的方式工作。不知道我在这里错过了什么。
谢谢你的帮助。
解决方案
您可以使用此正则表达式来完成这项工作:
- 寻找:
(^.*?--update-password\s+)\S+(\s+--.*)
- 代替:
$1*****$2
您的正则表达式不起作用的原因是由于可选的捕获组:(\s+--\w+)?
推荐阅读
- kubernetes - google PD 的 kubernetes 卷挂载问题(已安装 kubeadm)
- sql - 连接多个表时,总和是它应该是的倍数
- vb.net - 使用 Runspace 在 Visual Basic 中调用 powershell 脚本时出现 System.NullReferenceException
- ruby - 大型 JSON 字符串中的字符串插值
- python - 当python中的一行中有多个最大值时,在2维向量的每一行中查找最大值
- java - 只有在其他片段被销毁时才启动一个方法
- javascript - 对于 JavaScript 的 toLocaleDateString,是否有替代 dateStyle 和 timeStyle 的新标准?
- sql - Oracle SQL:未使用索引
- java - Spring LogOut 功能不注销
- asp.net-core - 如何使用 Blazor webassembly 使我的 ASP.NET Core 网站加载更快?