关于如何在命令行上传递多个正则表达式的约定

Convention on how pass multiple regexps on command line

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

这是我想到的一个例子

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

所以我想问的是,例如逗号是否是正则表达式的良好分隔符,如果分隔符需要出现在正则表达式中,what/how 可以避免逗号。

我 expecting/hoping 很少需要在正则表达式中使用逗号(或其他),所以我想使用尽可能轻量级的语法。

欢迎提供指向采用此类参数的现有 cli 工具的指针。

编辑

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

iexps = regexp1,regexp2 oexps = regexp3,regexp4

如果正则表达式是简单的替代方案,regex1|regex2 形式的单个正则表达式很可能是最简单的解决方案。

如果您无论如何都需要从 属性 文件中解析逗号分隔的正则表达式,最好在命令行中也使用相同的语法。游戏结束。

我想到但并不真正推荐的一件事是将正则表达式包装在一对定界符内,在这对定界符之外逗号定界符将是明确的。在 sed、Awk、Perl 和 PHP 中,斜杠作为正则表达式分隔符很受欢迎;但是 PHP 应该作为一个警告示例,因为 preg_replace 语法在双引号方面有一个讨厌的问题("/regex/" 是双引号字符串中斜杠分隔符之间的正则表达式)。


不,逗号不是一个好的分隔符,因为它可以有效地出现在正则表达式中。

我的建议是使用选项解析器,它允许您多次指定相同的选项名称,因此您可以说

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

例如,如果您的实现语言是 Python 并且您使用的是 optparse,请查看 action='append' 行为。