我正在编写一个小命令行实用程序,需要使用多个参数,每个参数都可以是正则表达式列表。是否有关于如何做到这一点的约定?
这是我想到的一个例子
mycliutility -i regexp1,regexp2 -o regexp3,regexp4 somefilename
所以我问是否例如逗号是regexpression的优秀separtor以及如果分隔符需要出现在regexp中的话/如何转义它。
我期待/希望在regexp中使用逗号(或其他)的需求很少,所以我想使用尽可能轻量级的语法。
对现有cli工具的指针很受欢迎。
修改
正则表达式也可能来自Java属性文件,因此如果命令行上的多个rexep被视为一个,那么如果它更“清洁”(因此CLI和属性上的语法相同)文件),请参阅此example.properties文件:
iexps = regexp1,regexp2 oexps = regexp3,regexp4
答案 0 :(得分:1)
如果正则表达式是简单的替代方法,那么regex1|regex2
形式的单个正则表达式可能是最简单的解决方案。
如果您需要从属性文件中解析逗号分隔的正则表达式,那么您最好在命令行上使用相同的语法。游戏结束。
我想到的一件事,但并非真正推荐,是将正则表达式包装在一对分隔符中,在其外部逗号分隔符将是明确的。斜杠在sed
,Awk,Perl和PHP中作为正则表达式分隔符很受欢迎;但PHP应该作为一个警告示例,因为preg_replace
语法有双引号的问题("/regex/"
是双引号字符串中斜杠分隔符之间的正则表达式。)
不,逗号不是一个好的分隔符,因为它可以在正则表达式中有效地发生。
我的建议是使用一个选项解析器,它允许你多次指定相同的选项名称,所以你可以说
mycliutility -i regexp1 -i regexp2 -o regexp3 -o regexp4 somefilename
如果您的实现语言是Python,并且您使用的是optparse
,请查看action='append'
行为。