【问题标题】:Regex match all 1 to 2 digits exclude 4 digits正则表达式匹配所有 1 到 2 位数字,排除 4 位数字
【发布时间】:2016-05-20 06:00:59
【问题描述】:

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

这是我玩的表情:

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

这是一个示例段落,我会在上面使用它

2015 年 1 月 16-25 日 Array 迪拜购物节 2015 年阿联酋迪拜 3 月 6-9 日 Array Port Fairy 民俗节 Port Fairy,维多利亚, 澳大利亚 2015 年 3 月 12 日 Array Brunswick 音乐节墨尔本, 澳大利亚维多利亚 2015 年 3 月 14-15 日 Array Tasmania International Arts 澳大利亚塔斯马尼亚州霍巴特节 2015 年 3 月 21 日至 22 日 Array Castlemaine State Festival Castlemaine,维多利亚,澳大利亚 2016 4 月 26 日至 31 日 Array 悉尼,新南威尔士州,澳大利亚 2016 年悉尼皇家复活节展 4 月 1-8 日 Array Sydney Royal Easter Show 悉尼,新南威尔士州,澳大利亚 2016 6 月 26 日 Array CEHL 会议 NAB Docklands,墨尔本,维多利亚, 澳大利亚 2016 年 7 月 27-30 日 Array ‘Fun4Kids’ 国际儿童 2017 年 1 月 16 日至 25 日,澳大利亚维多利亚州瓦南布尔节 Array Dubai 购物节 阿联酋迪拜 2017 年 3 月 6 日至 9 日 Array Port 2017 年 3 月 12 日,澳大利亚维多利亚,仙女民俗节 Port Fairy Array Brunswick 音乐节 墨尔本,维多利亚,澳大利亚 2017 3 月 14-15 日 Array 塔斯马尼亚国际艺术节霍巴特, 澳大利亚塔斯马尼亚 2017 年 3 月 21 日至 22 日 Array Castlemaine State 澳大利亚维多利亚州 Castlemaine 节

这是由用户生成的。所以日期可以有多种格式。

【问题讨论】:

  • \b\d{1,2}\b 有什么问题?
  • 您的正则表达式也匹配 3 位数字。允许吗?

标签: php regex


【解决方案1】:

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

\b\d{1,2}\b

它确保数字的任一侧都有一个单词字符(包括数字)。

这样可以确保连续不超过 2 个数字。

如果您的意图是获取数字(如在您的实验中),只需将括号放回它周围:

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

You can see it work here on regex101.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多