php - preg_replace_callback returning same as input -
$ post = preg_replace_callback ("/ \ [स्मार्टक्वाइट] ((?: (?! \ [Smartquote \] )।) ++) \ [\ / smartquote \] / s ", फ़ंक्शन ($ मैच) उपयोग ($ pdo) {if (isset ($ match [0])) {$ returnData = explode ('_', $ मैच [1]); यदि (रिक्त ($ वापसी डेटा [0]) || रिक्त ($ वापसी डेटा [1]) {वापसी 'कुछ भी नहीं मिला';} और {$ getPost = $ pdo- & gt; तैयार ("SELECT * `पोस्ट` से WHERE` tid` =: topic_id और amp; `id` =: id"); $ getPost- & gt; बाइंड वैल्यू (': topic_id', $ returnData [0]); $ getPost-> gt; bindValue ': Id', $ returnData [1]); $ getPost- & gt; निष्पादित करें (); यदि ($ getPost-> rowCount () == 0) {वापसी '& lt; div class = "well" & gt; & lt; H5 & gt; उद्धरण: & lt; / h5 & gt; & gt; div शैली = "फ़ॉन्ट-आकार: 12px;" & gt; उद्धरण डेटा & lt; / div & gt; & lt; / div & gt; ';} और' वापसी 'कुछ, कुछ, गहराई।'; }}}}, $ पोस्ट); मैं इस पर हर बार प्रतिक्रिया का उपयोग करने की कोशिश करता हूं, इनपुट है क्या कोई मेरी मदद कर सकता है?
उदाहरण के लिए यदि इनपुट $ post = '[smartquote] 44_12 [/ smartquote]'; - यह एक ही परिणाम देगा।
मैंने आपके कोड की कोशिश की और उम्मीद के मुताबिक काम करने के लिए लग रहा था, भले ही मुझे पता चल गया कि आप अपने पहले समापन स्क्वायर ब्रेस के सामने एक पलायन खो रहे हैं। मैंने सोचा था कि चीजें दूर फेंक सकते हैं, लेकिन मेरे आश्चर्य से यह काम किया।
यहाँ डेटा है कि मैं इस्तेमाल किया है:
बनाएँ तालिका नहीं है तो 'पदों (` अहस्ताक्षरित नहीं नल एटऑन्सेन्मेंट, `टीआईडी 'एएनआईटी (9) अहस्ताक्षरित नॉल डिफॉल्ट' 0 ',' पोस्ट_टाइटल 'वर्चार (100) नल नहीं,' पोस्ट_डेटा 'पाठ नल, प्राथमिक कुंजी (` आईडी`) , कुंजी `विषय_आईडी` (` टीआईडी`)) इंजन = इंनोडीबी आउटऑन्ग्रेमेंट = 13 डिफॉल्ट चार्सेट = लैटिन 1; मूल्यों (`आईडी`,` टीआईडी```, 'पोस्ट_टाइटेल`,' पोस्ट_डेटा`) में शामिल करें (12, 44, 'नेन ने इसे लिया', 'वहां एक बार नंटुकेट का एक इंसान था जो अपनी सारी नकदी को बाल्टी में रखता था । '); मैंने आपकी इनपुट स्ट्रिंग लिया और अपने फ़ंक्शन को थोड़ी-थोड़ी में संशोधित किया, यह सुनिश्चित करने के लिए कि वास्तव में, डेटाबेस से डेटा को जोड़ने और खींचना कोड इस तरह दिखता है:
$ pdo = नया पीडीओ ("mysql: host = localhost; dbname = so;", "root", ""); $ Post = '[स्मार्टक्वाट] 44_12 [/ स्मार्टक्वाइट]'; $ Post = preg_replace_callback ("/? [Smartquote] ((?! \ [Smartquote \])।) +?) \ [\ / Smartquote \] / s", फ़ंक्शन ($ मैच) उपयोग ($ pdo) {Ifet ($ match [0])) {$ returnData = विस्फोट ('_', $ match [1]); यदि (खाली ($ वापसी डेटा [0]) || खाली ($ वापसी डेटा [1])) {Return 'कुछ नहीं मिला';} और ($ getPost = $ pdo- & gt; तैयार करें ("चयन करें * FROM posts 'जहां' tid` =: topic_id और amp; आईडी id =: id"); $ getPost- & Gt; बाइंड वैल्यू (': topic_id', $ returnData [0]); $ getPost- & gt; बाइंड वैल्यू (': आईडी', $ लौटेंडेटा [1]); $ मिलता है; पोस्ट- & gt; निष्पादित करें (); अगर ($ मिलता है-- ; RowCount () == 0) {return '& lt; div class = "well" & gt; & lt; h5 & gt; उद्धरण: & lt; / h5 & gt; & lt; div शैली = "फ़ॉन्ट-आकार: 12px;" & gt; उद्धरण डेटा & lt; / Div & gt; & lt; / div & gt; ';} अन्य {// वापसी' कुछ, कुछ, अंधेरे का किनारा। '; $ Row = $ getPost- & gt; प्राप्त करेंसभी (); $ post_title = $ row [0] [' पोस्ट 'शीर्षक'] ; $ Post_data = $ row [0] ['पोस्ट_डेटा']; $ रिटर्न_डेटा = "& lt; b & gt;" $ post_title। "& Lt; / b & gt; & lt; br & gt; & lt; br & gt; $। $ Post_data; वापसी $ वापसी_डेटा ;}}}}, $ पोस्ट); प्रिंट $ पोस्ट; यह निम्न को आउटपुट करता है:
& lt; b & gt; नेन ने इसे ले लिया & lt; / b & gt; & lt; br & gt; & lt; br & gt; एक बार एक आदमी था नान्चकी से जो एक बाल्टी में अपने सभी नकदी रखता था। वैसे भी, मेरा सुझाव है कि पहले बंद होने वाले वर्ग की कसौटी को आज़माकर उसे बचाना होगा और इसे दोबारा प्रयास करना होगा। अगर डेटा उसी में लौट रहा है जो आप में डालते हैं, तो इसका मतलब यह है कि यह पहली जगह पर मैच नहीं बना पा रहा है। यदि यह वास्तव में मामला है, तो आप अपनी अभिव्यक्ति को दोबारा लिखने की कोशिश कर सकते हैं कि क्या आप इसे किसी अन्य तरीके से खोजने के लिए प्राप्त कर सकते हैं।
जिस डेटा पर आप उम्मीद कर रहे हैं, उसके आधार पर यह काम कर सकता है और स्टोर करेगा विषय आईडी में $ match [1] और आईडी में $ match [2] : ~ (? & Lt; = \ [smartquote \]) (?: (\ D +) _ (\ d +)) (? = \ [/ Smartquote \]) ~ s फिर आप इस हिस्से को पूरी तरह से समाप्त करने में सक्षम होना चाहिए:
यदि (isset ($ match [0])) {$ returnData = विस्फोट ('_', $ match [ 1]); यदि (खाली ($ वापसी डेटा [0]) || खाली ($ वापसी डेटा [1])) {वापसी 'कुछ नहीं मिला'; } Else { चूंकि यह फ़ंक्शन को बिल्कुल भी नहीं चलाएगा यदि $ match [0] सेट नहीं किया गया है। हो सकता है कि आप अभी भी यह देखना चाहें कि यदि $ match [1] और $ match [2] में डेटा होता है, यद्यपि।
Comments
Post a Comment