是否可以使用preg_match(或任何其他方式)从列表中获取ID(在#之后)?
实施例: 搜索:的 datadata Echo(其ID): num0035586039
<a href="page1.html#num0035583725">name1</a>
<a href="page30.html#num0035584494">othername</a>
<a href="page55.html#num0035584859">word</a>
<a href="page132.html#num0035585496">wordname</a>
<a href="page133.html#num0035586039">datadata</a>
<a href="page203.html#num0035586647">fsdfasfas</a>
谢谢!
答案 0 :(得分:0)
<?php
$dataArray=array('<a href="page1.html#num0035583725">name1</a>','<a href="page30.html#num0035584494">othername</a>');
$data='';
foreach($dataArray as $row){
if (strpos($row, 'othername') !== false) {
$whatIWant = substr($row, strpos($row, "#") + 1);
$newData=substr($whatIWant, 0, strpos($whatIWant, '"'));
echo $newData;
}
}
您的输出是您要查找的ID。
编辑:我在数组中设置了2个链接,所以我的代码在整个数组中查找,试图匹配你想要的值(name1)。当它找到它然后继续tirmming。输出当然是id。如果有2个以上的hrefs符合您的搜索标准,它将打印它们的ID(因此它不限于1)。
编辑:要获得与搜索匹配的完整链接,请访问:
if (strpos($row, 'othername') !== false) {
echo htmlspecialchars($row);
//the rest of the code
答案 1 :(得分:0)
如上文link所述
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
function unparse_url($parsed_url) {
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
return "$fragment";
}
?>
将返回
anchor
答案 2 :(得分:0)
快速且(非常)肮脏的回答:
$data = '<a href="page1.html#num0035583725">name1</a>
<a href="page30.html#num0035584494">othername</a>
<a href="page55.html#num0035584859">word</a>
<a href="page132.html#num0035585496">wordname</a>
<a href="page133.html#num0035586039">datadata</a>
<a href="page203.html#num0035586647">fsdfasfas</a>';
preg_match_all("/#num(\d+)\">([^<]*)</", $data, $matches);
$search = array_combine($matches[1], $matches[2]);
print_r($search);
结果:
Array
(
[0035583725] => name1
[0035584494] => othername
[0035584859] => word
[0035585496] => wordname
[0035586039] => datadata
[0035586647] => fsdfasfas
)
正则表达式会扫描#num
的出现次数,然后在">
和<
之间取得所有内容。
我是否已经提到这很脏?正则表达式是解析XML的一种讨厌方式。更好地使用一些解析器。
答案 3 :(得分:0)
我不会使用正则表达式。您可以使用HTML解析器来获取准确的HREF,然后使用URL解析器获取片段。
$string = '<a href="page1.html#num0035583725">name1</a>
<a href="page30.html#num0035584494">othername</a>
<a href="page55.html#num0035584859">word</a>
<a href="page132.html#num0035585496">wordname</a>
<a href="page133.html#num0035586039">datadata</a>
<a href="page203.html#num0035586647">fsdfasfas</a>';
$doc = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
$doc->LoadHTML($string, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $doc->getElementsByTagName('a');
foreach($links as $link){
if(strpos($link->nodeValue, 'name1') !== FALSE) {
$href = $link->getAttribute('href');
$url_bits = parse_url($href);
echo $url_bits['fragment'];
}
}
如果由于某种原因URL解析器不起作用,您可以在$href
处使用正则表达式,explode或preg_split。正则表达式可能是:
$string = '<a href="page1.html#num0035583725">name1</a>
<a href="page30.html#num0035584494">othername</a>
<a href="page55.html#num0035584859">word</a>
<a href="page132.html#num0035585496">wordname</a>
<a href="page133.html#num0035586039">datadata</a>
<a href="page203.html#num0035586647">fsdfasfas</a>';
$doc = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
$doc->LoadHTML($string, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $doc->getElementsByTagName('a');
foreach($links as $link){
if(strpos($link->nodeValue, 'name1') !== FALSE) {
$href = $link->getAttribute('href');
preg_match('/#\K.+/', $href, $fragment);
echo $fragment[0];
}
}