必须以Perl正则表达式模式转义哪些字符

时间:2016-03-10 13:34:14

标签: regex perl

我试图找到看起来像这样的文件:

access_log-20160101
access_log-20160304
...

使用perl正则表达式我想出了类似的东西:

/^access_log-\d{8}$/

但我不确定" _"和" - "。这些元字符是什么? 这是什么表达式?

我读到了" _"在正则表达式中就像\ w,但我如何在我的表达中使用它们?

/^access\wlog-\d{8}$/ ?

2 个答案:

答案 0 :(得分:3)

你的正则表达式完全正确

不需要转义下划线_或连字符-。在方括号内的字符类之外,十二个Perl正则表达式元字符是

  • 括号( ) [ {
  • 量词* + ?
  • 主播^ $
  • 交流发电机|
  • 狂野角色.
  • 逃脱本身\

只有这些必须转义

如果您的文件名模式与您显示的模式不同,那么您正在使用的模式

^access_log-\d{8}$

是正确的,除非您需要验证日期字符串


[A-F]之类的字符类 中,如果您希望按字面意思解释,必须转义连字符。就目前而言,该类相当于[ABCDEF]。如果您只是指A-F这三个字符,那么[A\-F]将会执行您想要的操作,但通常将连字符放在开头或结尾处。类列表使其明确无误。 [-AF][AF-][A\-F]相同,而且更具可读性

答案 1 :(得分:2)

下划线(_)不是元字符,不需要引用(如果引用它,它不会改变任何内容)。

连字符(-)是一个元字符,用于定义括号内字符类中两个符号之间的范围。但是,在此特定位置,它将被逐字解释,不需要引用,因为它不在[]内,并且两边都有符号。

您可以按原样使用正则表达式;如果您的格式将来发生变化,则可能需要引用连字符(-)。