2008-09-04 14 views
26

को छोड़कर सभी HTML टैग्स को स्ट्रिप करें, मैं लिंक के अपवाद (<a href और टैग क्रमशः सभी HTML को स्ट्रिप करने के लिए नियमित अभिव्यक्ति लिखने की कोशिश कर रहा हूं। यह 100% सुरक्षित नहीं है (मैं इंजेक्शन के बारे में चिंतित नहीं हूं हमलों या कुछ भी रूप में मुझे वह सामग्री को पहले से ही अनुमोदित किया गया है और एक SWF फिल्म में प्रकाशित) को पार्स कर रहा हूँ।लिंक

मूल "पट्टी टैग" रेगुलर एक्सप्रेशन से मैं उपयोग कर रहा हूँ <(.|\n)+?> था, और मैं <([^a]|\n)+?> करने के लिए इसे संशोधित करने के लिए कोशिश की, लेकिन निश्चित रूप से किसी भी टैग को में एक स्थान के साथ शुरू करने वाले किसी भी टैग की अनुमति होगी।

यह नहीं कि यह वास्तव में मायने रखता है, लेकिन अगर किसी को यह जानने की परवाह है कि मैं इसे ActionScript 3.0 में Flash मूवी के लिए लिख रहा हूं।

उत्तर

26
<(?!\/?a(?=>|\s.*>))\/?.*?> 

इसे आजमाएं। पी टैग के लिए कुछ समान था। उनके लिए काम किया तो क्यों नहीं देखते क्यों नहीं। यह देखने के लिए नकारात्मक लुकहेड का उपयोग करता है कि यह एक (वैकल्पिक/वर्ण के साथ उपसर्ग) से मेल नहीं खाता है (जहां सकारात्मक लुकहेड का उपयोग किया जाता है) एक (वैकल्पिक/उपसर्ग के साथ) एक> या एक स्थान, सामान और फिर> के बाद होता है। यह तब अगले> चरित्र तक मेल खाता है।

s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g; 

इस के साथ एक subst में इस रखो केवल उद्घाटन और एक टैग

+0

यह 'sed' साथ मेरे लिए काम नहीं करता है ... – Geremia

1

मैं इसके बारे में चल रहा रखने के लिए बंद करने छोड़ देना चाहिए, लेकिन वहाँ कोई रास्ता नहीं मैं भी अक्सर regexr की सिफारिश कर सकते हैं। यह इस तरह की चीजों का परीक्षण करने के लिए शानदार है।

1

सामान्य रूप से इस दृष्टिकोण के साथ समस्याएं हैं। रेगेक्स 'फ्लैट' टेक्स्ट मैचों के लिए सबसे अच्छे हैं - नेस्टेड डेटा उन क्षेत्रों में रेगेक्स इंजन को धक्का देता है जिनके लिए उन्हें डिज़ाइन नहीं किया गया है। सामान्य एचटीएमएल पार्सिंग को एक पार्सर की आवश्यकता नहीं होती है जो रेगेक्स इंजन नहीं है (यदि आप पूर्ण तकनीकी विवरण चाहते हैं तो नियमित और संदर्भ मुक्त भाषाओं के बीच अंतर के लिए Google)।

यह रिक्त स्ट्रिंग या उनके इकाई समकक्ष के साथ/</और/>/जगह लेकिन चुनिंदा regexes का उपयोग कर चीजों को तोड़ने के आकस्मिक या दुर्भावनापूर्ण आदानों की एक विस्तृत श्रृंखला के लिए असुरक्षित हो जाएगा एचटीएमएल छान कर सभी टैग को निकाल देते हैं करने के लिए आसान है।

0

ये रहा:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>} 
-2

strip_tags() करता है।

यहाँ, मैं सब <a><p><font><b><i><sup> टैग सहित और एक tidied संस्करण outputting हूँ:

cat input.htm | tr -d '\n' | php -r '$input=fgets(STDIN); echo strip_tags($input,"<a><p><font><b><i><sup>");' | tidy -i -wrap 0 -o output.htm