Preg 匹配 2 个字符串之间的任何内容


Preg Match anything between 2 strings

我必须从这个网站获取一个号码的位置

lookupexpert.com/search_phone?phone_number=7322691678

我想要一个与内部任何东西匹配的正则表达式

<p class="location">OCEAN GATE, NJ</p>

我该怎么做?

这就是我到目前为止所做的

<?php
$subject = file_get_contents("http://lookupexpert.com/search_phone?phone_number=7322691678");
$pattern = '#'<p class="location"'>(.+?)'<'/p'>#s';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>

还有...我尝试使用 Xpath,效果不佳,因为它没有得到适当的验证

/html/body/div/div[2]/div/ul/li[2]/p[4]

试试这个:

$subject = file_get_contents( 'http://www.lookupexpert.com/search_phone?phone_number=7322691678');
preg_match_all( '#<p class="location">(.*?)</p>#', $subject, $matches);
var_dump( $matches[1][1]);

这输出:

string(14) "OCEAN GATE, NJ" 

演示

使用此 XPath

//p[@class='location']/text()

或此正则表达式

(?<=<p class="location">)([^<>]+)(?=</p>)

法典

preg_match_all('%(?<=<p class="location">)([^<>]+)(?=</p>)%', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[1];

最好不要依赖不可靠的正则表达式来解析 HTML,而是使用 DOM 解析器。使用如下代码:

$doc = new DOMDocument();
libxml_use_internal_errors(true);
// assuming search_phone.html contains your saved HTML source
#$doc->loadHTMLFile('search_phone.html'); // loads your html
$xpath = new DOMXPath($doc);
$value = $xpath->evaluate("string(//li[starts-with(@class, 'recordItem')]/
                           p[@class='location']/text())"); 
echo "Location Name: [$value]'n"; // prints your location

输出:

Location Name: [OCEAN GATE, NJ]

试试这个。

$string = '<p class="location">OCEAN GATE, NJ</p>';
$pattern = '/<p class="location">(.*)<'/p>/';
$preg = preg_match_all($pattern, $string, $match);
print_r($match);