正则表达式匹配所有1至2位数字不包括4位数

时间:2016-05-20 06:00:59

标签: php regex

我正在尝试匹配段落中的所有日期,因此任何1或2位数而不是一年或4位数。 我可以捕获1或2位数,但当我尝试排除4位数时,它会捕获两个2位数字。 任何人都可以帮助我排除这些年份吗?

接下来我正在玩的表情:

((?!\d{4})\d{1,2})

这是一个我将在

上使用它的示例段落
  

2015年1月16日至25日阵列迪拜购物节迪拜,2015年阿联酋   3月6日至9日维多利亚港仙女港仙女民俗节   澳大利亚2015年3月12日阵列布伦瑞克音乐节墨尔本,   澳大利亚维多利亚2015年3月14日至15日阵塔斯马尼亚国际艺术   节日霍巴特,塔斯马尼亚,澳大利亚2015年3月21日至22日   列阵Castlemaine状态节日Castlemaine,维多利亚,澳大利亚2016年   4月26日至31日澳大利亚新南威尔士州悉尼悉尼2016年皇家复活节展   4月1 - 8日阵列悉尼皇家复活节展2016年澳大利亚新南威尔士州悉尼   6月26日阵中CEHL会议NAB Docklands,维多利亚州墨尔本,   澳大利亚2016年7月27日至30日阵列'Fun4Kids'国际儿童   Festival Warrnambool,维多利亚,澳大利亚2017年1月16日至25日   阵列迪拜购物节迪拜,阿联酋2017年3月6日至9日阵列端口   Fairy Folk Festival Port Fairy,维多利亚,澳大利亚2017年3月12日   Array Brunswick音乐节墨尔本,维多利亚,澳大利亚2017年   3月14 - 15日阵容塔斯马尼亚国际艺术节霍巴特,   澳大利亚塔斯马尼亚岛2017年3月21日至22日阵列Castlemaine州   Festival Castlemaine,维多利亚,澳大利亚

这是由用户生成的。因此,日期可以采用多种方式进行格式化。

1 个答案:

答案 0 :(得分:4)

在您的情况下,最简单的方法(我认为)将使用字边界

\b\d{1,2}\b

确保数字的任意一侧有 字符(包括数字)。

这将确保它不会连续超过2位数。

如果您打算捕获数字(如在实验中),只需将括号放回其周围:

(\b\d{1,2}\b)

You can see it work here on regex101