Php 正则表达式:多个选项之间的OR运算符

Php 正则表达式:多个选项之间的OR运算符,php,regex,Php,Regex,图案 主题 在这种情况下,为什么这个正则表达式不匹配kvittering 小组需要匹配数字您得到的匹配是因为(?:faktura | kreditnota | kvittering)匹配了第一个faktura,然后[^\p{L}]匹配了单词后的斜线 如果您抓取了所有匹配项,则可以获取最后一个,并访问[Group 1 value] 获取最后一个匹配的另一种方法是在模式的开头添加*,并添加s修饰符,以确保匹配包括换行符在内的任何字符,并且您将能够使用预匹配获取匹配,然后再次获取组1值。看 然而,从描

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


小组需要匹配数字

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

如果您抓取了所有匹配项,则可以获取最后一个,并访问[Group 1 value]

获取最后一个匹配的另一种方法是在模式的开头添加
*
,并添加
s
修饰符,以确保
匹配包括换行符在内的任何字符,并且您将能够使用
预匹配
获取匹配,然后再次获取组1值。看

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

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

图案细节

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

要求是什么?我需要匹配类似的号码?或者?
\K
做什么?
\K
使正则表达式引擎忽略匹配缓冲区中迄今为止匹配的文本。请注意,第二个正则表达式要干净得多,但我可能无法满足您对我们隐藏的某些要求。
faktura/kvittering 6856895
'~\b(?:faktura|kreditnota|kvittering)\s+\K\w+~'