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)
-1个或多个空格\s+
-一个匹配重置运算符,它忽略了匹配内存缓冲区中迄今为止匹配的文本\K
-1+字字符(您可以使用\w+
仅匹配字母数字字符)[^\w\u]
\K
做什么?\K
使正则表达式引擎忽略匹配缓冲区中迄今为止匹配的文本。请注意,第二个正则表达式要干净得多,但我可能无法满足您对我们隐藏的某些要求。
faktura/kvittering 6856895
'~\b(?:faktura|kreditnota|kvittering)\s+\K\w+~'