我试图找到看起来像这样的文件:
access_log-20160101
access_log-20160304
...
使用perl正则表达式我想出了类似的东西:
/^access_log-\d{8}$/
但我不确定" _"和" - "。这些元字符是什么? 这是什么表达式?
我读到了" _"在正则表达式中就像\ w,但我如何在我的表达中使用它们?
/^access\wlog-\d{8}$/ ?
答案 0 :(得分:3)
你的正则表达式完全正确
不需要转义下划线_
或连字符-
。在方括号内的字符类之外,十二个Perl正则表达式元字符是
(
)
[
{
*
+
?
^
$
|
.
\
只有这些必须转义
如果您的文件名模式与您显示的模式不同,那么您正在使用的模式
^access_log-\d{8}$
是正确的,除非您需要验证日期字符串
在[A-F]
之类的字符类 中,如果您希望按字面意思解释,必须转义连字符。就目前而言,该类相当于[ABCDEF]
。如果您只是指A
,-
或F
这三个字符,那么[A\-F]
将会执行您想要的操作,但通常将连字符放在开头或结尾处。类列表使其明确无误。 [-AF]
和[AF-]
与[A\-F]
相同,而且更具可读性
答案 1 :(得分:2)
下划线(_
)不是元字符,不需要引用(如果引用它,它不会改变任何内容)。
连字符(-
)是一个元字符,用于定义括号内字符类中两个符号之间的范围。但是,在此特定位置,它将被逐字解释,不需要引用,因为它不在[]
内,并且两边都有符号。
您可以按原样使用正则表达式;如果您的格式将来发生变化,则可能需要引用连字符(-
)。