关于如何在命令行上传递多个regexp的约定

时间:2015-02-06 04:51:26

标签: regex command-line-interface

我正在编写一个小命令行实用程序,需要使用多个参数,每个参数都可以是正则表达式列表。是否有关于如何做到这一点的约定?

这是我想到的一个例子

mycliutility -i regexp1,regexp2 -o regexp3,regexp4 somefilename

所以我问是否例如逗号是regexpression的优秀separtor以及如果分隔符需要出现在regexp中的话/如何转义它。

我期待/希望在regexp中使用逗号(或其他)的需求很少,所以我想使用尽可能轻量级的语法。

对现有cli工具的指针很受欢迎。

修改

正则表达式也可能来自Java属性文件,因此如果命令行上的多个rexep被视为一个,那么如果它更“清洁”(因此CLI和属性上的语法相同)文件),请参阅此example.properties文件:

iexps = regexp1,regexp2 oexps = regexp3,regexp4

1 个答案:

答案 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'行为。