如何用正则表达式拆分命令行参数并保留连字符?
解决方案
要正确拆分这种带空格参数和特殊标记的命令行,不能单纯靠正向断言,得用更精准的正则逻辑,核心是区分命令主体、短参数(-开头)、**长参数(--开头)**以及单独的终止标记--。
正则表达式思路
用以下正则进行匹配,直接捕获每个完整的参数块:
^.*?(?=\s-(?!-)|$)|--?\S+(?:\s(?!-|--)\S+)*|--$
逻辑拆解
^.*?(?=\s-(?!-)|$):匹配开头的命令主体,直到遇到空格后接单个-(短参数)或者行尾--?\S+(?:\s(?!-|--)\S+)*:匹配短参数(-xxx)或长参数(--xxx),并且包含后续跟着的非参数开头的内容(比如带空格的路径/值)--$:单独匹配作为终止标记的--
匹配效果测试
把目标命令行代入,会直接得到你想要的拆分结果:
some\path to\an\executable.exe-foo--bar-baz abc\d e--qux-tux 123--vux 456--
注意事项
- 如果参数里有引号包裹的内容(比如
"path with space"),这个正则需要调整,但你当前的场景里没有这种情况,直接用就行 - 这个正则已经考虑了长参数里的连字符(比如
--bar-baz),不会错误拆分这类参数
内容的提问来源于stack exchange,提问作者i_am_jorf
相关产品推荐
相关产品推荐

