我正在写一个日期解析器使用boost正则表达式,我记得(模糊地),该提升允许正则表达式组成。作为我在这里寻找的示例是Perl示例代码:如何从多个正则表达式组成正则表达式与提升
my $year = qr/\d{1,4}(?:\d\(?B\.C\.\)?)?/;
my $gmonth = qr/(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)/i;
my $fmonth = qr/(?:VEND|BRUM|FRIM|NIVO|PLUV|VENT|GERM|FLOR|PRAI|MESS|THER|FRUC|COMP)/i;
my $hmonth = qr/(?:TSH|CSH|KSL|TVT|SHV|ADR|ADS|NSN|IYR|SVN|TMZ|AAV|ELL)/i;
my $month = qr/(?:$gmonth|$fmonth|$hmonth)/i;
my $day = qr/\d{1,4}/;
my $DE = qr/(?:\@\#DHEBREW\@|\@\#DROMAN\@|\@\#DFRENCH_R\@|\@\#DGREGORIAN\@|\@\#DJULIAN\@|\@\#DUNKNOWN\@)/;
my $DR = qr/(?:AFT|BEF)\s/i;
my $DA = qr/(?:ABT|CAL|EST)\s/i;
my $DI = qr/INT\s/i;
my $prefix = qr/(?:$DR|$DA|$DI)/i;
my $date = qr/$prefix?(?:$DE\s)?(?:$day\s)?(?:$month\s)?$year/;
my $date_p = qr/FROM\s$date\sTO\s$date/i;
my $date_f = qr/FROM\s$date/i;
my $date_t = qr/TO\s$date/i;
my $date_r = qr/BET\.?\s$date\s(?:AND|-)\s$date/i;
my $GED_date = qr/(?:$date|$date_p|$date_r|$date_f|$date_t)/;
while (<DATA>) {
next if /DATE\s$GED_date/;
print $_;
}
正如你所看到的组成是非常需要的。这只是产生一个正则表达式来测试'合法性'。所以我的问题几乎可以用boost来做类似的事情?指针或链接会很好。我可以从中推断出的小例子非常好。与此同时,我将继续击中增强版书籍!
也许可以在此页面帮助您:http://www.boost.org/doc/libs/1_44_0 /doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.grammars_and_nested_matches.building_a_grammar –
@CasimiretHippolyte Spot on!尽管---问题是否可以指定我的子表达式比表达式风格稍微不透明? – hsmyers
xpressive文档中的“[动态正则表达式文法]”(http://www.boost.org/doc/libs/1_44_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.grammars_and_nested_matches.dynamic_regex_grammars)如何使用引用其他正则表达式的动态(基于字符串的)正则表达式构建语法,这可能更像您期望的。 –