https://regex101.com/r/VY5LIG/1
(?:faktura|kreditnota|kvittering)\b ?((?:\p{L}+\d+|(?:[\d ]|[^\p{L}])*))
faktura/kvittering 6856895
为什么这个正则表达式在这种情况下不匹配kvittering
?
该组需要匹配数字
答案 0 :(得分:2)
您获得的匹配是由于(?:faktura|kreditnota|kvittering)
与第一个faktura
匹配,然后[^\p{L}]
与该词后面的斜杠匹配。
如果您抓取所有匹配项,则可以获取最后一项匹配项,然后访问[组1值]。1
获得最后一场比赛的另一种方法是在模式的开头添加.*
并添加s
修饰符,以确保.
匹配任何包含换行符的字符,然后您能够获得preg_match
的匹配并再次获取第1组值。请参阅this regex demo。
然而,根据描述,您似乎需要匹配第一个交替组中的单词,然后匹配一个或多个代码,这些代码似乎由字母数字/单词字符组成。因此,我建议使用:
'~\b(?:faktura|kreditnota|kvittering)\s+\K\w+~'
请参阅this regex demo。
模式详情
\b
- 领先的单词边界(?:faktura|kreditnota|kvittering)
- 三个单词中的任何一个\s+
- 一个或多个空格\K
- 匹配重置运算符,省略了匹配内存缓冲区的文本\w+
- 1个单词字符(您可以使用[^\W_]
来匹配字母数字字符)。