2009-09-01 12 views
17

वर्षों से PHP का उपयोग करने के बावजूद, मैंने वास्तव में कभी नहीं सीखा है कि स्ट्रिंग्स को ठीक से छीनने के लिए अभिव्यक्तियों का उपयोग कैसे करें ... जो अब मुझे पीछे की ओर काट रहा है!php में टैग के बीच पाठ को कैसे निकालें?

क्या कोई मुझे इसे छेड़छाड़ करने में कुछ मदद प्रदान कर सकता है? मैं तुम्हें यह अन्य href रों के साथ फिर से उपयोग करने के लिए चाहते हो सकता है पर विचार यूआरएल से पाठ भाग बाहर काट की जरूरत है, क्या कुछ इस तरह के बारे में

<a href="link.html"></a> 

उत्तर

29
$str = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $str) 
+0

हालांकि यह काम करता है, आप आमतौर पर रेगेक्स के साथ HTML को पार्स नहीं करना चाहते हैं। करीम का जवाब बेहतर हो सकता है। – Konerak

6

में

<a href="link.html">text</a> 

मोड़,:

$str = '<a href="link.html">text</a>'; 
$result = preg_replace('#(<a[^>]*>).*?(</a>)#', '$1$2', $str); 
var_dump($result); 

जो तुम मिल जाएगा:

string '<a href="link.html"></a>' (length=24) 

(मुझे लगता है कि आप ओपी में एक टाइपो बना रहे हैं?)


आप किसी भी अन्य href मैच के लिए की जरूरत नहीं है, तो आप की तरह कुछ इस्तेमाल कर सकते हैं:

$str = '<a href="link.html">text</a>'; 
$result = preg_replace('#(<a href="link.html">).*?(</a>)#', '$1$2', $str); 
var_dump($result); 

कौन सा भी आपको मिल जाएगा:

string '<a href="link.html"></a>' (length=24) 


एक के रूप में sidenote: अधिक जटिल HTML के लिए, नियमित अभिव्यक्तियों का उपयोग करने की कोशिश न करें: वे इस तरह की साधारण स्थिति के लिए ठीक काम करते हैं, लेकिन वास्तविक जीवन HTML भाग के लिए, वे वास्तव में जेनेरा में मदद नहीं करते हैं एल: एचटीएमएल regexes द्वारा पार्स करने के लिए काफी "नियमित" "पर्याप्त" नहीं है।

1

आप stringpos के साथ संयोजन में सबस्ट्रिंग इस्तेमाल कर सकते हैं eventhough इस एक बहुत अच्छा तरीका नहीं है।

की जांच: PHP Manual - String functions

एक और तरीका है एक नियमित अभिव्यक्ति अपने मानदंड से मेल खाते में लिखने के लिए होगा। लेकिन आपकी समस्या को जल्दी हल करने के लिए स्ट्रिंग फ़ंक्शन करेंगे ...

संपादित करें: मैंने दर्शकों को कम करके आंका। ;) Regexes के साथ आगे बढ़ो ... ^^

14

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

<?php 
// example of how to modify anchor innerText 
include('simple_html_dom.php'); 

// get DOM from URL or file 
$html = file_get_html('http://www.example.com/'); 

//set innerText to null for each anchor 
foreach($html->find('a') as $e) { 
    $e->innerText = null; 
} 

// dump contents 
echo $html; 
?> 
+2

कोई अपराध नहीं, लेकिन यह उत्तर 8 साल का है, और किसी ने वास्तव में यह नहीं देखा है कि यह उत्तर गलत है और काम नहीं करता है। '$ Html' को प्रतिबिंबित करते समय फ़ोरैच लूप का कोई प्रभाव नहीं पड़ता है। विश्वास नहीं कर सकता कि इसने इतने सारे वोट प्राप्त किए हैं और किसी ने वास्तव में इसका परीक्षण नहीं किया है। –

1

केवल strip_tags() उपयोग करते हैं, कि टैग से छुटकारा और उनके बीच केवल इच्छित पाठ छोड़ दिया

0

आप जायेगा खुद टैग को कैप्चर करने की आवश्यकता नहीं है। बस टैग के बीच पाठ को लक्षित करें और इसे खाली स्ट्रिंग से प्रतिस्थापित करें। सुपर सरल

कोड: (Demo)

$string='<a href="link.html">text</a>'; 
echo preg_replace('/<a[^>]*>\K[^<]*/','',$string); 
// the opening tag--^^^^^^^^ ^^^^^-match everything before the end tag 
//       ^^-restart fullstring match 

आउटपुट:

<a href="link.html"></a> 

या हाशिये मामलों में कड़ी पाठ एक < शामिल जब, इस का उपयोग करें: ~<a[^>]*>\K.*?(?=</a>)~

इस की कीमत से बचा जाता है एक आलसी क्वांटिफायर का उपयोग करके समूह को कैप्चर करें, पूर्ण स्ट्रिंग \K और "लुकहेड" को पुनरारंभ करें।

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