使正则表达式更具可读性

时间:2016-02-16 12:59:44

标签: regex perl

我有这样一个长期的reggex:
if( $var =~ /(word1|word2|word3|word4)/但实际上我有超过4个单词而且它们要大得多 如何在不破坏reggex的情况下添加新行以使其更具可读性? 例如。

if($var =~ /(word1 |  
                  word2 |  etc

2 个答案:

答案 0 :(得分:6)

添加/x修饰符,忽略正则表达式中的空格:

if ($var =~ / ( word1 |  
                word2 |
                word3
              )/x
    ) {

您还可以通过|加入单词并使用qr运算符创建正则表达式,从列表中构建正则表达式:

my $regex = join '|', qw( word1
                          word2
                          word3
                        );
$regex = qr/($regex)/;

答案 1 :(得分:2)

您可以通过...首先不使用正则表达式使正则表达式更具可读性。如果您的实际代码实际上与您的示例一样简单(即,只是匹配备用字符串而没有任何模式匹配),为什么不使用哈希呢?

my $var = 'word1';
my %lookup = map { $_ => 1 } qw(word1 word2 word3 word4);

if ($lookup{$var}) {
    # do something...
}