दिलचस्प पोस्ट
AsyncTask क्लास पर PostExecute विधि से लौटें मूल्य Node.js – यूटीसी में डेट स्ट्रिंग फ़ॉर्मेट कैसे करें FXML नियंत्रक वर्ग तक पहुंच एक HTTP POST करने और प्रतिक्रिया लेने का सरल उदाहरण C अतिपरिवर्तन के लिए कोई पैरामीटर विपरीत-विचरण क्यों नहीं है? प्रतिस्थापन के बाद घटनाक्रम पंजीकरण नहीं है अमान्य iPhone अनुप्रयोग बाइनरी कैसे कमांड लाइन में कई जावा स्रोत फ़ाइलों को संकलित करने के लिए UINavigationController बैक बटन नाम कैसे बदल सकता है? स्काला मैक्रोज़ का स्टेटिक रिटर्न टाइप एचटीएमएल इनपुट फाइल चयन इवेंट एक ही फाइल को चुनने पर फ़ायरिंग नहीं करता है आप दो जीआईटी भंडारों को कैसे मर्ज करते हैं? jQuery के सभी divs प्राप्त करें जो कि क्लास विशेषता नहीं है I स्ट्रिंग में एकाधिक वर्ण बदलें कैसे 2 या अधिक .WAV फ़ाइलें एक साथ कार्यक्रम में शामिल होने के लिए?

ए तत्व की href विशेषता को हल करना

किसी पृष्ठ पर लिंक ढूंढने की कोशिश कर रहा है

मेरा regex है:

/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/ 

लेकिन में असफल लगता है

 <a title="this" href="that">what?</a> 

मैं टैग में पहले नहीं रखा गया href से निपटने के लिए अपना regex कैसे बदलूँगा?

Solutions Collecting From Web of "ए तत्व की href विशेषता को हल करना"

HTML के लिए विश्वसनीय Regex कठिन हैं यहां डोम के साथ यह कैसे करना है:

 $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 } 

और देखें:

  • एचटीएमएल पार्स करने के लिए सर्वश्रेष्ठ तरीके
  • PHP में DOMDocument

एक sidenote पर: मुझे यकीन है कि यह एक डुप्लिकेट है और आप जवाब यहाँ कहीं मिल सकता है

मैं गॉर्डन से सहमत हूं, आपको एचटीएमएल को पार्स करने के लिए एचटीएमएल पार्सर का इस्तेमाल करना होगा। लेकिन अगर आप वास्तव में एक regex चाहते हैं तो आप यह कोशिश कर सकते हैं:

 /^<a.*?href=(["\'])(.*?)\1.*$/ 

यह <a स्ट्रिंग की शुरुआत में <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" } } 

जो काम करता है मैंने पहले कैप्चर ब्रेसेज़ को हटा दिया है

मुझे यकीन नहीं है कि आप यहां क्या करने का प्रयास कर रहे हैं, लेकिन अगर आप लिंक को मान्य करने का प्रयास कर रहे हैं तो PHP के filter_var () देखें

यदि आपको वास्तव में एक नियमित अभिव्यक्ति का उपयोग करना है तो यह उपकरण देखें, इससे मदद मिल सकती है: http://regex.larsolavtorvik.com/

अपने regex का उपयोग करते हुए, मैंने आपकी आवश्यकता के अनुरूप इसे थोड़ा बदल दिया।

<a.*?href=("|')(.*?)("|').*?>(.*)<\/a>

मैं व्यक्तिगत रूप से सुझाव देता हूं कि आप एक HTML पार्सर का उपयोग करते हैं

संपादित करें: परीक्षण किया गया

एक के लिए जो अभी भी सरल और सरल प्रयोग नहीं SimpleXML का उपयोग कर

 $a = new SimpleXMLElement('<a href="www.something.com">Click here</a>'); echo $a['href']; // will echo www.something.com 

यह मेरे लिए काम कर रहा है

त्वरित परीक्षण: <a\s+[^>]*href=(\"\'??)([^\1]+)(?:\1)>(.*)<\/a> ऐसा करने वाला लगता है चाल, पहले मैच के साथ "या", दूसरा 'href' मान 'कि', और तीसरा 'क्या'?

इसके कारण मैंने "/ 'के पहले मैच को छोड़ दिया है कि आप इसका इस्तेमाल बाद में बंद करने के लिए कर सकते हैं" /' ताकि यह वही हो

पर लाइव उदाहरण देखें: http://www.rubular.com/r/jsKyK2b6do

preg_match_all ("/ () >) (। ?) (</ a) /", $ सामग्री, $ आक्षेप, PREG_SET_ORDER);

इसका परीक्षण किया गया है और यह किसी भी HTML कोड से सभी टैग लाता है।