在PHP中,我正在使用以下正则表达式匹配此处的文本http://pastebin.com/PfjEgQpd:
preg_match('#(.*(?s))(particella |particelle |p\.|part\.|p |part |mappale |mapp\.|mapp |n\.|\*) *(\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 = 944
,我在$matches
中得到了以下输出。
我期望匹配的是1184
,但实际上匹配的是4
。
我尝试了使用(?sU)
,但没有成功。
$matches = array(6) {
[0]=>
array(2) {
[0]=>
string(59) "* 1184 sub.702, vioolo San Vincenzo n.4, piano T, Categoria"
[1]=>
int(1226)
}
[1]=>
array(2) {
[0]=>
string(36) "* 1184 sub.702, vioolo San Vincenzo "
[1]=>
int(1226)
}
[2]=>
array(2) {
[0]=>
string(2) "n."
[1]=>
int(1262)
}
[3]=>
array(2) {
[0]=>
string(1) "4"
[1]=>
int(1264)
}
[4]=>
array(2) {
[0]=>
string(20) ", piano T, Categoria"
[1]=>
int(1265)
}
[5]=>
array(2) {
[0]=>
string(9) "Categoria"
[1]=>
int(1276)
}
}
$offset = int(944)
(?s)(.*?)(particell[ea]\s+|p(?:art)?[.\s]|mapp(?:(?:ale)?\s|\.)|n\.|\*)\s*(\d+[\d\s/\p{Pd}]*)($|.{0,20}?(graffati|particell[ae]\s|p(?:art)?[.\s]|mapp(?:(?:ale)?\s|\.)|n\.|subaltern[oi]\s|s(?:ub)?[.\s]|\bcat(?:egoria)?\b|\brendita\b|\bvani\b|\bconsistenza\b|\bR\.C\.\b))
гАВжИСдЉШеМЦдЇЖж®°еЉПпЉМеєґе∞ЖеЄЄиІДз©Їж†ЉжЫњжНҐдЄЇеМєйЕНжЙАжЬЙз©ЇзЩље≠Чзђ¶зЪД\s
ж®°еЉПгАВе¶ВжЮЬеЬ®жЬЂе∞ЊжЈїеК†/u
дњЃй•∞зђ¶пЉМжВ®ињШеПѓдї•дљњзФ®еЃГеМєйЕНжЙАжЬЙUnicodeз©Їж†ЉеТМжХ∞е≠ЧгАВ - Wiktor Stribiżewparticella
后面的空格。 - Marco Marsala