我正在制作一个脚本,通过大量的电子邮件寻找两个字符串。
它会找到been all shipped on [timestamp here]
或shipped by the seller on [timestamp here]
。
现在我在$res[1]
上获得一个空匹配,如果它只找到第二个字符串,如果它只找到第一个字符串,则在$res[2]
中为空。我该如何解决这个问题,以便始终用$res[1]
填充时间戳?
if (preg_match("/been all shipped on ([0-9]{4}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2})|shipped by the seller on ([0-9]{4}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2})/", strip_tags($message), $res)) {
}
答案 0 :(得分:6)
您必须隔离时间戳并将其余内容置于交替中:
"/(?:been all shipped|shipped by the seller) on (\d{4}\.\d{2}\.\d{2} \d{2}:\d{2})/"
答案 1 :(得分:2)
@ Akshay2598对你的案件有最恰当的答案。
另一种方法:您可以使用“分支重置”功能:
if (preg_match("/(?|been all shipped on ([0-9]{4}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2})|shipped by the seller on ([0-9]{4}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}))/", strip_tags($message), $res)) {
}
使用此功能,组具有相同的编号:(?|....(..)....|....(..)....)
。这对于更复杂的案例非常有用。