gpt4 book ai didi

c++ - 结合2个正则表达式

转载 作者:行者123 更新时间:2023-11-28 03:13:21 35 4
gpt4 key购买 nike

我有以下正则表达式:第一个提取具有以下模式的日期 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

是否可以合并它们?

谢谢。

最佳答案

描述

是的,您可以将它们结合起来。这个正则表达式将:

  • 匹配 dd-mm-yyyy 格式的日期,其中分隔符可以是 .-、空格或 /
  • 允许年份为 2 位或 4 位数字
  • 如果不是 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

enter image description here

我对你的表达做了一些细微的修改,比如:

  • (f|F) 等结构更改为 [fF]
  • 删除了 unicode 字符,因为我不太熟悉它们
  • 更改了日期匹配以将 0?[1-9] 推到末尾,以防止不小心首先匹配此交替。
  • [1|2] 等结构更改为 [12]

请注意,我必须删除 Unicode 字符才能使其适用于我的系统。我不使用带重音符号的 unicode,所以我不太确定它们如何作为正则表达式中的转义字符串工作。

关于c++ - 结合2个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17733309/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com