1

我的应用程序中的用户将使用正则表达式来指定应用程序应采用哪些文件以及应排除哪些文件,例如包含匹配的文件foo.*\.txt

然而,有时过滤器需要使用只有应用程序在运行时才能知道的值。例如,如果过滤器是foo[SPECIALVALUEHERE].*\.txt并且特殊值恰好是 bar,则实际过滤器将是foobar.*\.txt

哪些字符可用于指定 [SPECIALVALUEHERE]?我想为了避免歧义,它不能是正则表达式中的特殊/保留字符,也不能是文件中出现的字符。客户的另一个要求是它必须是一个(或最多两个或三个)字符,所以像 %SPECIALVALUE% 这样的东西是不可能的。

我可以为此目的使用哪个字符或字符组合的任何建议。

4

3 回答 3

1

在正则表达式(字符类之外)中只有 12 个具有特殊含义的符号,应该转义:

  • 单字符:.
  • 字符串开始/结束锚点:^ $
  • 量词:+ * ?
  • 捕获组分隔符:( )
  • 量词开始分隔符:{
  • 字符类开头分隔符:[
  • 交替符号:|
  • 最后一个转义符号本身:\

要转义它们(=特殊含义的条带),只需在它们前面加上\符号。要分隔正则表达式的特殊部分,您可以使用任何非特殊和非字母数字符号:#~立即想到。)

作为旁注,在 Perl 中,您可以使用\Q...\E运算符自动引用正则表达式的一部分。

于 2012-10-01T17:16:42.527 回答
1

例如,在 Windows 上,您可以使用=它不是正则表达式中的特殊字符,但不允许在文件名中使用(这里是一个不能在 Windows 文件名中使用的字符表)。然后,您可以将 = 替换为您需要的内容。

否则在 unix 系统上会很混乱,因为任何字节序列都可以不受限制地成为文件名的一部分,这里有一个关于 serverfault 的参考问题,因此,即使语言不可知,您至少应该决定要使用哪些系统正则表达式。

于 2012-10-01T17:41:26.747 回答
1

我用双花括号来处理这类事情。我使用的任何正则表达式方言都不能识别花括号内的任何内容,因此它不是正则表达式中的有效字符串。 foo{{SPECIALVALUEHERE}}\.txt

于 2012-10-01T17:58:54.710 回答