जवाबों:
HTML के लिए विश्वसनीय Rexx मुश्किल हैं । यह डोम के साथ कैसे करना है :
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
echo $dom->saveHtml($node), PHP_EOL;
}
ऊपर स्ट्रिंग में सभी तत्वों के "बाहरी HTML" को खोजा और आउटपुट किया जाएगा ।A
$html
नोड के सभी पाठ मान प्राप्त करने के लिए , आप करते हैं
echo $node->nodeValue;
यह देखने के लिए कि क्या href
विशेषता मौजूद है आप कर सकते हैं
echo $node->hasAttribute( 'href' );
वह विशेषता प्राप्त करने के लिए जो href
आप करेंगे
echo $node->getAttribute( 'href' );
करने के लिए बदलने केhref
गुण आपको बस इतना चाहते हैं
$node->setAttribute('href', 'something else');
विशेषता को हटाने के href
लिए आप क्या करेंगे
$node->removeAttribute('href');
आप एक्सपीथ केhref
साथ सीधे विशेषता के लिए क्वेरी भी कर सकते हैं
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a/@href');
foreach($nodes as $href) {
echo $href->nodeValue; // echo current attribute value
$href->nodeValue = 'new value'; // set new attribute value
$href->parentNode->removeAttribute('href'); // remove attribute
}
और देखें:
एक विचार पर: मुझे यकीन है कि यह एक डुप्लिकेट है और आप यहां कहीं जवाब पा सकते हैं
मैं गॉर्डन से सहमत हूं, आप HTML को पार्स करने के लिए HTML पार्सर का उपयोग करें। लेकिन अगर आप वास्तव में एक रेगेक्स चाहते हैं, तो आप इसे आज़मा सकते हैं:
/^<a.*?href=(["\'])(.*?)\1.*$/
यह <a
स्ट्रिंग के भीगने पर मेल खाता है , इसके बाद किसी भी नंबर पर कोई चार (गैर लालची) और .*?
उसके href=
बाद "
या तो चारों ओर से कड़ी से कड़ी'
$str = '<a title="this" href="that">what?</a>';
preg_match('/^<a.*?href=(["\'])(.*?)\1.*$/', $str, $m);
var_dump($m);
आउटपुट:
array(3) {
[0]=>
string(37) "<a title="this" href="that">what?</a>"
[1]=>
string(1) """
[2]=>
string(4) "that"
}
जिस पैटर्न को आप देखना चाहते हैं वह लिंक एंकर पैटर्न होगा, जैसे (कुछ):
$regex_pattern = "/<a href=\"(.*)\">(.*)<\/a>/";
आप सिर्फ मैच क्यों नहीं करते
"<a.*?href\s*=\s*['"](.*?)['"]"
<?php
$str = '<a title="this" href="that">what?</a>';
$res = array();
preg_match_all("/<a.*?href\s*=\s*['\"](.*?)['\"]/", $str, $res);
var_dump($res);
?>
फिर
$ php test.php
array(2) {
[0]=>
array(1) {
[0]=>
string(27) "<a title="this" href="that""
}
[1]=>
array(1) {
[0]=>
string(4) "that"
}
}
जो काम करता है। मैंने अभी पहली कैप्चर ब्रेसेस को निकाला है।
preg_match_all("/<a.*?href\s*=\s*['\"](.*?)['\"]/", $str, $res, PREG_SET_ORDER);
करने के लिए सही ढंग से सभी href मान को पकड़ने के लिए उपयोग करने के लिए पुन: दावा करता हूंforeach($res as $key => $val){echo $val[1]}
जो अभी भी SimpleXML का उपयोग कर समाधान बहुत आसान और तेज नहीं मिलता है
$a = new SimpleXMLElement('<a href="www.something.com">Click here</a>');
echo $a['href']; // will echo www.something.com
मेरे लिए इसका काम करना
मुझे यकीन नहीं है कि आप यहां क्या करने की कोशिश कर रहे हैं, लेकिन अगर आप लिंक को मान्य करने की कोशिश कर रहे हैं तो PHP के filter_var () को देखें
यदि आपको वास्तव में एक नियमित अभिव्यक्ति का उपयोग करने की आवश्यकता है, तो इस टूल को देखें, इससे मदद मिल सकती है: http://regex.larsolavtorvik.com/
अपने regex का उपयोग करते हुए, मैंने आपकी आवश्यकता के अनुरूप इसे थोड़ा संशोधित किया।
<a.*?href=("|')(.*?)("|').*?>(.*)<\/a>
मैं व्यक्तिगत रूप से सुझाव देता हूं कि आप एक HTML पार्सर का उपयोग करें
EDIT: परीक्षण किया गया
<a title="this" href="that">what?</a>
त्वरित परीक्षण: <a\s+[^>]*href=(\"\'??)([^\1]+)(?:\1)>(.*)<\/a>
लगता है कि चाल चल रही है, 1 मैच "या 'के साथ, दूसरा' href 'मान' और 'और तीसरा' क्या?"।
मेरे द्वारा "/ 'के पहले मैच को छोड़ने का कारण यह है कि आप इसे बाद में इसे बंद करने के लिए उपयोग कर सकते हैं" /' इसलिए यह समान है।
लाइव उदाहरण देखें: http://www.rubular.com/r/jsKyK2b6do
preg_match_all ("/ () > ( ?) (</ a) /", $ सामग्री, $ impmatches, PREG_SET_ORDER);
यह परीक्षण किया गया है और यह किसी भी HTML कोड से सभी टैग प्राप्त करता है।
निम्नलिखित मेरे लिए काम कर रहा है और दोनों लौटाता है href
और value
एंकर टैग की।
preg_match_all("'\<a.*?href=\"(.*?)\".*?\>(.*?)\<\/a\>'si", $html, $match);
if($match) {
foreach($match[0] as $k => $e) {
$urls[] = array(
'anchor' => $e,
'href' => $match[1][$k],
'value' => $match[2][$k]
);
}
}
बहुआयामी सरणी को कहा जाता है $urls
जिसमें अब सहयोगी उप-सरणियाँ हैं जो उपयोग करने में आसान हैं।