正则表达式中的贪婪问题

时间:2016-01-28 11:10:49

标签: php regex

在PHP中,我将http://siba.thenetworksolution.it/allegati/H3018500D7FDDE9ACA05671F49F4F3746A69DAF96.1329514.pdf.txt中的文字与以下正则表达式匹配:

preg_match('#(.*(?s))(particella |particelle |p\.|part\.|p |part |mappale |mapp\.|mapp |n\.|\*)\s*(\d+[\d /\p{Pd}]*)($|.{0,20}(?s)(graffati|particella |particelle |p\.|.*part\.|p |part |mappale |mapp\.|mapp |n\.|subalterno |subalterni |sub\.|s\.|sub |s |\bcat\b|\bcategoria\b|\brendita\b|\bvani\b|\bconsistenza\b|\bR\.C\.\b))#i', $txt, $matches, PREG_OFFSET_CAPTURE, $offset)
带有offset = 1155

(即文字中#34; foglio"这个词的偏移量。)

我希望它们匹配454(就在偏移之后),但它匹配57/1998(后面是很多行)。

在regex101.com上进行一些测试后,我发现问题是前缀particella454之间的回车,但我希望\s匹配换行符。

我如何纠正贪婪,以便正则表达式匹配454

1 个答案:

答案 0 :(得分:0)

解决。在第二组particella之后有一个空格。