2011-08-30 77 views
0

我想知道是否可以在正则表达式中使用像自定义模式模板之类的东西。一个简单的例子:在Regex中使用模式模板?

# this regex 
^1xyz2xyz3xyz4$ 
# matches this string 
"1xyz2xyz3xyz4" 

正如人们所看到的,我必须使用“XYZ”三次,所以我的问题是:我能为“XYZ”一次定义模板,然后在剩下的使用模板名称的正则表达式?

+0

你可以种做到这一点与反向引用如果你的正则表达式引擎支持他们。 – NullUserException

回答

2

在Perl和PCRE可以使用(?(DEFINE)...)块申报命名组,然后打电话给他们命名为正则表达式:

my $re = qr{ 
    (?(DEFINE) (?<tmp> xyz) ) 
    ^1 (?&tmp) 2 (?&tmp) 3 (?&tmp) 4 $ 
}x; 

print "1xyz2xyz3xyz4" =~ $re;