2011-04-08 11 views
25

ठीक है, इसलिए मैं वर्तमान में एक आरएसएस फ़ीड पार्स करने पर काम कर रहा हूं। मुझे वह डेटा मिला है जिसकी मुझे कोई समस्या नहीं है, और मैंने जो कुछ छोड़ा है वह गेम शीर्षक को पार्स कर रहा है।preg_match(); - अज्ञात संशोधक '+'

यहाँ कोड मैं वर्तमान में है (sloppiness उपेक्षा, यह सिर्फ अवधारणा का प्रमाण है):

<?php 
$url = 'http://raptr.com/conexion/rss'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 
curl_close($ch); 

$xml = new SimpleXMLElement($result); 

$lastgame = $xml->channel->item[0]->description; 
preg_match('[a-zA-Z]+</a>.$', $lastgame, $match); 

echo $match; 
?> 

सब कुछ महान काम कर रहा था, लेकिन फिर मैं यह त्रुटि मिल रही शुरू कर दिया:

Warning: preg_match() [function.preg-match]: 
Unknown modifier '+' in raptr.php on line 14 

एकमात्र चीज जो मैंने छोड़ी है वह बंद करने वाले एंकर टैग और अवधि को तोड़ना है, लेकिन मुझे लगता है कि यह '+' क्यों पसंद नहीं कर रहा है। कोई विचार?

संपादित करें: इसे डुप्लिकेट के रूप में चिह्नित नहीं किया जाना चाहिए क्योंकि इसे दूसरे प्रश्न से दो साल पहले पूछा गया था।

+0

आरएसएस फ़ीड का निरीक्षण करते हुए, आप वहां '$ 'का उपयोग नहीं करना चाहते हैं। – mario

+0

जब मैं $ को हटाता हूं तो यह केवल "कॉनेक्सियन" से मेल खाता है, हालांकि मैं मदद की सराहना करता हूं! –

+0

आप किस मैच से मेल खाते थे? किसी भी मौके से सभी लिंक? फिर 'preg_match_all' आज़माएं। अन्यथा एक आरएसएस पार्सर आज़माएं। – mario

उत्तर

40

आपको PHP में regexes के साथ delimiters का उपयोग करने की आवश्यकता है। आप अक्सर इस्तेमाल किए गए / का उपयोग कर सकते हैं, लेकिन PHP आपको किसी मिलान करने वाले वर्णों का उपयोग करने देता है, इसलिए @ और # लोकप्रिय हैं।

Further Reading

यदि आप अपने रेगेक्स के अंदर चर को इंटरपोल कर रहे हैं, तो preg_quote() पर दूसरे तर्क के रूप में आपके द्वारा चुने गए डिलीमीटर को पास करना सुनिश्चित करें। > < \/एक: के रूप में एक सीमांकक मतलब है कि आप भी इसे यहाँ से बचने के लिए तो जैसे, जरूरत

preg_match('/[a-zA-Z]+<\/a>.$/', $lastgame, $match); 
print_r($match); 

/ का उपयोग करना:

16

इस कोड का प्रयास करें।

अद्यतन

preg_match('/<a.*<a.*>(.*)</', $lastgame, $match); 
echo'['.$match[1].']'; 

सबसे अच्छा तरीका नहीं हो सकता है ...

+0

print_r ($ match); लौटाता है "ऐरे()" मुझे पूरा यकीन है कि मेरी अभिव्यक्ति सही है। –

+0

मुझे नहीं पता कि आपने अपनी टिप्पणी के साथ क्या कहने की कोशिश की है ... – Khez

+0

@Conexion, अपनी अन्य टिप्पणियों की जांच की, आप अपने आरएसएस फ़ीड से अपने मैच में खींचने की कोशिश कर रहे हैं? खेल ? – Khez

3

क्योंकि मैं एक डाल इस मुझे क्या हुआ रेगेक्स में परिवर्तनीय और कभी-कभी इसके स्ट्रिंग मान में स्लैश शामिल होता है। समाधान: preg_quote

+0

मुझे preg_quote के बारे में बताने के लिए धन्यवाद - बहुत उपयोगी फ़ंक्शन! –

संबंधित मुद्दे