Найдите последнее вхождение, используя регулярные выражения - PullRequest
0 голосов
/ 15 ноября 2010

Я новичок в области регулярных выражений, пожалуйста, помогите мне.Строка ниже встречается в одном документе:

not_unique \ "> 20000 миль в море

Мне нужно извлечь номер. Последовательность" not_unique "не уникальнаможет появиться во всем документе несколько раз, прежде чем появится этот образец. Часть «мили под морем» уникальна для документа, может использоваться как конечный разделитель.

Я пытался что-то подобное в PHP, но это не такне работает для меня:

if (preg_match('/(?=.*?miles under sea)(?!.+?not_unique)not_unique/', $document, $regs)) {...}

Пожалуйста, помогите!

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Как насчет этого?

<?php

$document = "blah blah blah sjhsdijf  not_unique\">20,000 miles under sea</a> jkdjksds  sdsjdlksdsd k skdjsld sd";

//the made optional, also account for 'leagues' instead of miles

preg_match("/([0-9,]{1,6})\s?(miles|leagues)\sunder(\sthe)?\ssea/i", $document, $matches);

print_r($matches);

?>
0 голосов
/ 15 ноября 2010

Это должно сработать:

preg_match_all('/[1234567890\,]+ miles under sea/i', 'not_unique\">20,000 miles under sea', $result); //find all occurances of the pattern
$tempval=$result[sizeof($result)-1]; //get the last one
$endresult=substr($tempval,0,strlen($tempval)-16); //get the string without the length of the ending string

При необходимости - замените 16 точной длиной конечной строки.

0 голосов
/ 15 ноября 2010

/ не уникально \ "> \ s * ([0123456789,] +) \ s * миль под морем /

должно сделать это.

...