Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Preg匹配两个字符串之间的任何内容_Php_Regex_Xpath - Fatal编程技术网

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

Php Preg匹配两个字符串之间的任何内容,php,regex,xpath,Php,Regex,Xpath,我必须从这个网站得到一个号码的位置 lookupexpert.com/search\u phone?电话号码=7322691678 我想要一个能匹配里面任何东西的正则表达式 <p class="location">OCEAN GATE, NJ</p> 试试这个 $string = '<p class="location">OCEAN GATE, NJ</p>'; $pattern = '/<p class="location">(.*

我必须从这个网站得到一个号码的位置

lookupexpert.com/search\u phone?电话号码=7322691678

我想要一个能匹配里面任何东西的正则表达式

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

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

$preg = preg_match_all($pattern, $string, $match);
print_r($match);
$string='

新泽西州海门; $pattern='/

(.*)/; $preg=preg\u match\u all($pattern,$string,$match); 打印(匹配);

试试这个:

$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]);

使用此XPath

//p[@class='location']/text()
或此正则表达式

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

(?最好不要依赖不可靠的正则表达式解析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
输出:
相同结果数组([0]=>Array([0]=>

location

[1]=>1345)[1]=>Array([0]=>location[1]=>1365])警告:simplexml加载文件()[function.simplexml加载文件]:test.txt:12:解析器错误:EntityRef:D:\xampp\htdocs\testing\test.php第2行中应为“;”警告:simplexml\u load\u file()[function.simplexml load file]:ps.googleapis.com/maps/api/js?key=aizasyc45ow6td6fwqhjmk1wifzjco YNnQfmU&D:\xampp\htdocs\testing\test\test.php第2行中的传感器警告:simplexml\u load\u file()[function.simplexml加载文件]:^在第2行的D:\xampp\htdocs\testing\test.php中警告:simplexml\u l………等等…它没有正确验证…是的…但是当您尝试使用$subject=file\u get\u contents(“)时,它会给出字符串(8)”位置“…为什么?!@RowMinds-因为它与表头匹配,表头也是一个

。将
preg\u match
调用更改为
preg\u match\u all
,并抛出第一个结果。我将更新我的帖子。以你为例,regex更容易、更简单。你可以使用xpath,但我怀疑你是否真的需要它。你的用例足够简单,可以使用regex并可以完成。如果

明天变成

是正则表达式的分隔符-您在示例正则表达式中选择了相同的分隔符。@anubhava,简单的问题产生简单的答案。仅此而已。它可以工作,谢谢,但您在那里用xpath”字符串(//li[@class='recordItem clearfix')做什么/p[@class='location']/text()“……我的意思是为什么“/html/body/div/div[2]/div/ul/li[2]/p[4]”是不正确的?它来自mozilla,第二,为什么用xpath代替regex?谢谢你实际上
$xpath->evaluate(“string(/html/body/div/div[2]/div/ul/li[2]/p[4]/text()))
对我来说也很好,但我更喜欢XPATH,因为它不依赖于索引号
[2]
[4]
等。因此,将来即使他们的web开发人员在那里再插入一个
标记,我的XPATH仍然可以工作。有数千个(字面上)这里有很多评论建议人们不要使用正则表达式进行HTML解析,原因很简单,正则表达式无法可靠地解析HTML。请参见:我理解,但我的方法/HTML/body/div/div[2]/div/ul/li[2]/p[4]/text()就像快餐一样,你不必查看你的html代码,只需打开Mozilla,复制粘贴xpath,你就完成了,正如我所说的,Mozilla生成的xpath在当前html源代码中也能正常工作。
//p[@class='location']/text()
(?<=<p class="location">)([^<>]+)(?=</p>)
preg_match_all('%(?<=<p class="location">)([^<>]+)(?=</p>)%', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[1];
$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]