我有以下输入
8_Evening-2010_Day4-UpTempo-NA_26-September-10_Item1
8_Evening-2010_Day4-UpTempo-NA_26-Sept-10_Item1
8_Evening-2010_Day4-UpTempo-NA_2-May-10_Item1
8_Evening-2010_Day4-UpTempo-NA-26-May-10_Item1
599_Evening_Ano-Jula-Saga_11_Jul-09_Item1
553_Sing-and-Other-Clips_Feb-09
以下表达式:
/.*(?:-|_)(\d{1,2}|)(?:-|_)(?i)([a-zA-Z]{3,4}|january|february|march|april|may|june|july|august|september)|october|november|december)(?-i)-(\d\d).*/
但是我无法得到最后的结果,这应该只是09年2月。有没有人知道如何让日期可选?
我也是正则表达式的新手。如果有人建议改进正则表达式,请随意。
答案 0 :(得分:1)
我建议做这样的事情:
(?i)(?:-|_)(?:(\d{1,2})(?:-|_))?([a-z]{3,4}|january|february|march|april|may|june|july|august|september|october|november|december)-(\d{2})
基本上我修改了这些要点:
修改强>
以下是PHP中的上述示例:
$input = array();
$input[] = "8_Evening-2010_Day4-UpTempo-NA_26-September-10_Item1";
$input[] = "8_Evening-2010_Day4-UpTempo-NA_26-Sept-10_Item1";
$input[] = "8_Evening-2010_Day4-UpTempo-NA_2-May-10_Item1";
$input[] = "8_Evening-2010_Day4-UpTempo-NA-26-May-10_Item1";
$input[] = "599_Evening_Ano-Jula-Saga_11_Jul-09_Item1";
$input[] = "553_Sing-and-Other-Clips_Feb-09";
$pattern = "/(?i)(?:-|_)(?:(\d{1,2})(?:-|_))?([a-z]{3,4}|january|february|march|april|may|june|july|august|september|october|november|december)-(\d{2})/";
foreach ($input as $string) {
$matches = array();
preg_match($pattern, $string, $matches);
print_r($matches);
}
根据preg_match
的文档,[0]
的第一个元素($matches
)将包含整个匹配项。以下三个元素将代表各个匹配组。由于没有可用的日期,因此不会为最后一个示例设置$matches[1]
。