【问题标题】:regex: OR operator between multiple options正则表达式:多个选项之间的 OR 运算符
【发布时间】:2017-11-09 22:09:23
【问题描述】:

https://regex101.com/r/VY5LIG/1

模式

(?:faktura|kreditnota|kvittering)\b ?((?:\p{L}+\d+|(?:[\d ]|[^\p{L}])*))

主题

faktura/kvittering 6856895

在这种情况下,为什么这个正则表达式不匹配 kvittering

组数需要匹配

【问题讨论】:

标签: php regex


【解决方案1】:

您得到的匹配是因为(?:faktura|kreditnota|kvittering) 匹配第一个faktura,然后[^\p{L}] 匹配单词后面的斜线。

如果你抓住了所有的匹配,你可以得到最后一个,并访问[Group 1 value]。1

获取最后一个匹配项的另一种方法是在模式的开头添加 .* 并添加 s 修饰符以确保 . 匹配任何字符,包括换行符,您将能够获得与 preg_match 匹配,然后再次获取 Group 1 值。见this regex demo

但是,从描述来看,您似乎需要匹配第一个交替组中的一个单词,然后是一个数字或一些似乎由字母数字/单词字符组成的代码。因此,我建议使用:

'~\b(?:faktura|kreditnota|kvittering)\s+\K\w+~'

this regex demo

模式详情

  • \b - 前导词边界
  • (?:faktura|kreditnota|kvittering) - 三个词中的任何一个
  • \s+ - 1 个或多个空格
  • \K - 一个匹配重置运算符,忽略匹配内存缓冲区中匹配的文本
  • \w+ - 1+ 个单词字符(您可以使用 [^\W_] 来匹配字母数字字符)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2011-01-03
    • 1970-01-01
    • 2013-11-18
    • 2023-03-10
    • 2014-08-24
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多