दिलचस्प पोस्ट
क्या यह एक कास्ट के बजाय "के रूप में" का उपयोग करने के लिए समझ में आता है, भले ही कोई निरर्थक जांच न हो? क्यों AngularJS में पदावनत की जगह है? "+" (प्लस चिन्ह) सीएसएस चयनकर्ता का मतलब क्या है? UIButton कस्टम फ़ॉन्ट वर्टिकल संरेखण फ़ाइल इनपुट 'स्वीकार' विशेषता – क्या यह उपयोगी है? क्यों मेरा .NET 4 अनुप्रयोग पता है। NET 4 स्थापित नहीं है SimpleDateFormat का उपयोग करने के लिए स्ट्रिंग को एक तिथि में कनवर्ट कैसे करें? क्या इसमें शामिल होने में कुछ गड़बड़ है जो एसक्यूएल या माय एसक्यूएल में जॉइन कीवर्ड का उपयोग नहीं करते हैं? पायथन का प्रयास करें-दूसरा अपेक्षित यदि कंडीशनल वैधीकरण विशेषता जावा छवि को परिवर्तित करने के लिए BufferedImage हैशमैप जटिलता डाल / रखो ऑपरेटर प्रीडेन्स बनाम ऑर्डर ऑफ एवल्यूएशन अंतराल द्वारा परिभाषित असतत श्रेणियों में निरंतर संख्यात्मक मानों को कनवर्ट करें मेरी समानता = (एक एकल बराबर) का उपयोग सही ढंग से काम क्यों नहीं करता?

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

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

मेरा regex है:

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

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

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

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

वेब के समाधान से एकत्रित समाधान "ए तत्व की 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 कोड से सभी टैग लाता है।