我有以下正则表达式: 第一个使用以下模式XX / XX / XXXX或XX-XX-XXX或XX XX XXX提取日期 第二个只是提取月份的名称
bool Keywords::extractDate(const char *date)
{
const boost::regex e("^([0]?[1-9]|[1|2][0-9]|[3][0|1])([\\.\\-\\/\\ ])([0]?[1-9]|[1][0-2])([\\.\\-\\/\\ ])([0-9]{4}|[0-9]{2})$");
return boost::regex_match(date,e);
}
bool Keywords::extractDate2(const char*date2)
{
const boost::regex e("((j|J)anvier|(f|F)\u00E9vrier|(f|F)évrier|(f|F)evrier|(m|M)ars|(a|A)vril|(m|M)ai|(j|J)uin|(j|J)uillet|juillet|(a|A)o\u00FBt|(a|A)oût|aout|(s|S)eptembre|(o|O)ctobre|(n|N)ovembre|(d|D)\u00E9cembre|(d|D)écembre|(d|D)ecembre|JANVIER|FEVRIER|MARS|AVRIL|MAI|JUIN|JUILLET|AOUT|SEPTEMBRE|OCTOBRE|NOVEMBRE|DECEMBRE)");
return boost::regex_match(date2,e);
}///end function
是否可以将它们组合起来?
谢谢。
答案 0 :(得分:2)
是的,你可以将它们结合起来。这个正则表达式将:
dd-mm-yyyy
格式的日期,其中分隔符可以是.
,-
,空格或/
dd-mm-yyyy
格式字符串,则在字符串中搜索月份名称 ^([12][0-9]|3[01]|0?[1-9])[-\\\/\s.](1[0-2]|0?[1-9])[-\\\/\s.]([0-9]{2}?[0-9]{2})$|([jJ]anvier|[fF]évrier|[fF]évrier|[fF]evrier|[mM]ars|[aA]vril|[mM]ai|[jJ]uin|[jJ]uillet|[aA]o[éû]t|aout|[sS]eptembre|[oO]ctobre|[nN]ovembre|[dD][eé]cembre|JANVIER|FEVRIER|MARS|AVRIL|MAI|JUIN|JUILLET|AOUT|SEPTEMBRE|OCTOBRE|NOVEMBRE|DECEMBRE)
现场演示:http://www.rubular.com/r/0i5uIj9ZJX
我对你的表达做了几处修改,例如:
(f|F)
等结构更改为[fF]
0?[1-9]
推到了最后,以防止意外匹配此次更改。[1|2]
等结构更改为[12]
注意我必须删除Unicode字符才能使其适用于我的系统。我不使用重音unicode,所以我不确定它们如何在正则表达式中作为转义字符串工作。