regex - Php: Find first img or object tag in string -


  फ़ंक्शन get_first_image () {global $ post, $ posts; $ First_img = ''; ob_start (); ob_end_clean (); $ आउटपुट = प्रीग_मैच_ल ('/ & lt; img। + Src = [\' "] ([^ \ '"] +) [\' "]। * & Gt; / i ', $ post- & gt; पोस्ट_ सामग्री, $ मिलान ); Preg_match_all ('/ & lt; ऑब्जेक्ट [0- 9 ए-जेड _? * = \ ": \ - \ / \। # \, & Lt; & gt; \\ n \\ r \\ t] + & lt; \ / ऑब्जेक्ट & gt; / smi ', $ post- & gt; पोस्ट_साइंट, $ मैचों); $ First_img = $ मिलान [1] [0]; यदि (खाली ($ first_img)) {// एक डिफ़ॉल्ट छवि परिभाषित करता है $ mediaSearch = preg_match_all ('/ & lt; ऑब्जेक्ट [0-9 a-z _? * = \ ": \ - \ / \। # \, & Lt; & gt ; \\ n \\ r \\ t] + & lt; \ / object & gt; / smi ', $ post- & gt; पोस्ट_content, $ matches2); $ first_media = $ matches2 [1] [0]; $ first_img = "/ छवियों / डिफ़ॉल्ट.jpg ";} यदि (! खाली ($ first_img)) {$ result =" & lt; div class = \ "alignleft \" & gt; & lt; img src = \ "$ first_img \" शैली = \ "अधिकतम -विधि: 200px; \ "/> gt; & lt; / div & gt;";} अगर (! खाली ($ first_media)) {$ result = "& lt; p & gt;"। $ First_media। "& Lt; / p & gt;";} रिटर्न $ का नतीजा;}  

हाय दोस्तों, मैं सिर्फ यह पूछना चाहता था कि मैं इस कोड में क्या गलती कर रहा हूं। मैं वर्तमान में एक छवि टैग का पहला अवसर ढूंढने की कोशिश कर रहा हूं या एक ऑब्जेक्ट टैग तो एक एचटीएमएल का एक टुकड़ा लौटाएगा यदि यह एक से मेल खाता है। मैं वर्तमान में इमेज टैग को सही पर प्राप्त कर सकता हूं। लेकिन दुर्भाग्यवश मैं किसी ऑब्जेक्ट टैग पर कोई परिणाम नहीं देख सकता। मैं सोच रहा हूं कि मेरे रेगेक्स पैटर्न में कुछ गलती हो या somet हिंग। क्या आप लोग मेरी सहायता कर सकते हैं? मुझे आशा है कि मैंने इसे आपके लिए धन्यवाद समझने के लिए पर्याप्त स्पष्ट किया है।

जबकि नियमित अभिव्यक्तियाँ कार्यों की एक विशाल विविधता, मुझे लगता है कि HTML DOM को पार्स करते समय यह आम तौर पर छोटा होता है। एचटीएमएल के साथ समस्या यह है कि आपके दस्तावेज़ की संरचना इतनी चरणीय है कि यह सही तरीके से सही (और सही ढंग से मेरा कोई झूठी सकारात्मक के साथ 100% सफलता दर का मतलब है) एक टैग निकालने वाला है।

मैं आपको क्या सलाह देता हूं ऐसा एक DOM पार्सर का उपयोग कर रहा है और इसे इस तरह प्रयोग करें:

  फ़ंक्शन get_first_image () {वैश्विक $ पोस्ट, $ posts; Need_once ('SimpleHTML.class.php') $ post_dom = str_get_dom ($ post- & gt; post_content); $ First_img = $ post_dom- & gt; खोजें ('आईएमजी', 0); अगर ($ first_img! == नल) {$ first_img- & gt; शैली = $ पहले_मग- & gt; शैली '; अधिकतम-चौड़ाई: 200px'; वापसी '& lt; div class = "alignleft" & gt;' । $ First_img- & gt; बाहरी टेक्स्ट '& Lt; / div & gt;'; } और {$ first_obj = $ post_dom- & gt; खोजें ('ऑब्जेक्ट', 0); अगर ($ first_obj! == नल) {वापसी '& lt; p & gt;' । $ First_obj- & gt; बाहरी टेक्स्ट '& Lt; / p & gt;'; }} वापसी '& lt; div class = "alignleft" & gt; & lt; img src = "/ images / default.jpg" शैली = "अधिकतम-चौड़ाई: 200px;" / & Gt; & lt; / div & gt; '; }  

कुछ लोग सोच सकते हैं कि यह उतार-चढ़ाव है, लेकिन अंत में, इसे बनाए रखना आसान होगा और अधिक अनुकूलन के लिए भी अनुमति होगी। उदाहरण के लिए, DOM पार्सर का उपयोग करके, मैं आपकी वर्तमान छवि की शैलियों में जोड़ सकता हूं।

एक ही लक्ष्य को हासिल करने के लिए एक नियमित अभिव्यक्ति तैयार की जा सकती है लेकिन ऐसा इस तरह सीमित होगा कि यह < कोड> शैली विशेषता को src या इसके विपरीत के बाद होना है, और इस सीमा को दूर करने के लिए नियमित अभिव्यक्ति में अधिक जटिलता शामिल होगी।

इसके अलावा, निम्न पर विचार करें । नियमित अभिव्यक्तियों का उपयोग करके और केवल src विशेषता प्राप्त करने के लिए (समूह 2 में कब्जा कर लिया गया) एक & lt; img & gt; टैग से मेल खाने के लिए, आपको निम्न नियमित अभिव्यक्ति की आवश्यकता है:

  & lt; \ s *? Img \ s +? [^ & Gt;] *? \ S *? Src \ s *? = \ S *? (["']) ((\\? + ।) *)? 1 [^ & gt;] *? & Gt;  

और फिर, ऊपर विफल हो सकता है यदि:

  • विशेषता या टैग नाम राजधानी में है और i संशोधक का उपयोग नहीं किया जाता है।
  • उद्धरण चिह्नों को src विशेषता के आसपास नहीं उपयोग किया जाता है
  • फिर एक और विशेषता src उनके मान में कहीं भी & gt; चरित्र का उपयोग करता है।
  • मुझे लगता है कि कुछ अन्य कारण नहीं है।

तो फिर, बस एक डोम दस्तावेज़ पार्स करने के लिए नियमित अभिव्यक्ति का उपयोग न करें।


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -