0

我是正则表达式新手,请帮帮我。下面的字符串出现在一个文档中:

not_unique\">海下 20,000 英里

我需要提取号码。序列“not_unique”不是唯一的,在该样本出现之前可能在整个文档中出现多次。“miles under sea”部分是文档独有的,可以作为结束分隔符。

我在 PHP 中尝试过这样的事情,但它对我不起作用:

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

请帮忙!

4

3 回答 3

2

这样的事情怎么样?

<?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);

?>
于 2010-11-15T09:21:03.097 回答
0

/ 不是唯一的\">\s*([0123456789,]+)\s*海下英里/

应该这样做。

于 2010-11-15T09:17:34.290 回答
0

这应该可以解决问题:

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 替换为结束字符串的确切长度。

于 2010-11-15T09:42:57.663 回答