क्या आप कुछ उदाहरण प्रदान कर सकते हैं कि एक्सएमएल और एचटीएमएल को रेगेक्स के साथ पार्स करना क्यों मुश्किल है? [बन्द है]


402

एक गलती मैं कर रही है लोगों को देखने के ऊपर और फिर से एक regex के साथ XML या HTML पार्स करने का प्रयास कर रहा है। एक्सएमएल और HTML को पार करने के कुछ कारण यहां दिए गए हैं:

लोग लाइनों के अनुक्रम के रूप में एक फ़ाइल का इलाज करना चाहते हैं, लेकिन यह मान्य है:

<tag
attr="5"
/>

लोग टैग की शुरुआत के रूप में <या <टैग का इलाज करना चाहते हैं, लेकिन इस तरह के सामान जंगली में मौजूद हैं:

<img src="imgtag.gif" alt="<img>" />

लोग अक्सर टैग को समाप्त होने वाले टैग से मिलान करना चाहते हैं, लेकिन XML और HTML टैग को खुद को शामिल करने की अनुमति देते हैं (जो पारंपरिक रीजैक्स सभी को संभाल नहीं सकते हैं:

<span id="outer"><span id="inner">foo</span></span> 

लोग अक्सर एक दस्तावेज़ की सामग्री (जैसे कि प्रसिद्ध "किसी दिए गए पृष्ठ पर सभी फोन नंबर ढूंढते हैं" समस्या) के खिलाफ मैच करना चाहते हैं, लेकिन डेटा को चिह्नित किया जा सकता है (भले ही यह सामान्य दिखाई देने पर दिखाई दे)

<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>

टिप्पणियों में खराब स्वरूपित या अपूर्ण टैग शामिल हो सकते हैं:

<a href="foo">foo</a>
<!-- FIXME:
    <a href="
-->
<a href="bar">bar</a>

क्या अन्य गोचरों से आप अवगत हैं?


14
वेब ब्राउज़र इस तरह की गड़बड़ी का एहसास लाखों बार एक दूसरे से करते हैं, क्या कोई हमारे लिए केवल एक वेब पेज पार्सर क्लास नहीं बना सकता है?
जॉन विंस्टनले

24
जॉन, उनके पास है। पर्ल में कई HTML :: Parser, HTML :: TreeBuilder आदि हैं। आपके लैंग्वेज के लिए लगभग निश्चित रूप से एक है।
चास।

12
सबसे अच्छा जवाब है, stackoverflow.com/a/1732454/135078 (खबरदार ज़ाल्गो)
केली एस। फ्रेंच

3
एक अच्छी व्याख्या है कि क्यों [आप [x] HTML को regex के साथ पार्स नहीं कर सकते] [1] [१]: stackoverflow.com/a/1732454/468725
Pavel P

4
यहां बताया गया है कि आप निश्चित रूप से HTML को पैटर्न के साथ कैसे पार्स कर सकते हैं , साथ ही साथ आप ऐसा क्यों नहीं करना चाहते हैं।
tchrist

जवाबों:


260

यहाँ आपके लिए कुछ मज़ेदार वैध XML हैं:

<!DOCTYPE x [ <!ENTITY y "a]>b"> ]>
<x>
    <a b="&y;>" />
    <![CDATA[[a>b <a>b <a]]>
    <?x <a> <!-- <b> ?> c --> d
</x>

और खुशी का यह छोटा बंडल वैध HTML है:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" [
    <!ENTITY % e "href='hello'">
    <!ENTITY e "<a %e;>">
]>
    <title>x</TITLE>
</head>
    <p id  =  a:b center>
    <span / hello </span>
    &amp<br left>
    <!---- >t<!---> < -->
    &e link </a>
</body>

अवैध निर्माणों के लिए सभी ब्राउज़र-विशिष्ट पार्सिंग का उल्लेख नहीं करना चाहिए।

सौभाग्य उस के खिलाफ regex खड़ा है!

EDIT (Jörg W Mittag): यहाँ अच्छी तरह से निर्मित, मान्य HTML 4.01 का एक और अच्छा टुकड़ा है:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd"> 
<HTML/
  <HEAD/
    <TITLE/>/
    <P/>

6
एक्सएमएल एक? वहाँ कुछ अलग निर्माण कर रहे हैं, जो परेशानी है? DTD आंतरिक सबसेट? यह एक नई & इकाई को परिभाषित कर रहा है; 'y' कहा जाता है, जिसमें एक ']>' अनुक्रम होता है जो सामान्य रूप से, यदि उद्धरण में नहीं है, तो आंतरिक सबसेट को समाप्त करें।
बोबिन्स

16
(यह दर्शाता है कि आपको डॉक्यूमेंट को ठीक से पार्स करने के लिए XML के कुछ अधिक गूढ़ और पुरातन DTD फीचर्स के बारे में काफी गहरा ज्ञान होना चाहिए, भले ही आप DTD-validating parser न हों।)
bobince

17
HTML उदाहरणों में शायद ही कभी ज्ञात सुविधा का उपयोग होता है: शॉर्टटैग। और अधिक पढ़ें w3.org/QA/2007/10/shorttags.html
netvope

25
जब भी कोई व्यक्ति HTML लिखता है, जैसा कि टिम बर्नर्स-ली के ऊपर दिखाया गया है, एक ही आंसू बहाता है।
fgysin

5
मैं प्यार करता हूँ कि कैसे Stackoverflow के Syntax हाइलाइटर "]" की पहली घटना पर विफल रहता है।
ग्लासगॉस्ट

71

वास्तव में

<img src="imgtag.gif" alt="<img>" />

मान्य HTML नहीं है, और XML भी मान्य नहीं है।

यह XML मान्य नहीं है क्योंकि '<' और '>' विशेषता स्ट्रिंग्स के अंदर मान्य वर्ण नहीं हैं। वे संबंधित XML संस्थाओं और लेफ्टिनेंट का उपयोग करके बच निकलने की जरूरत है; और & gt;

यह HTML मान्य नहीं है क्योंकि HTML में लघु समापन फ़ॉर्म की अनुमति नहीं है (लेकिन XML और XHTML में सही है)। HTML 4.01 विनिर्देशन के अनुसार 'img' टैग भी एक अनुमानित रूप से बंद टैग है। इसका मतलब है कि मैन्युअल रूप से इसे बंद करना वास्तव में गलत है, और किसी भी अन्य टैग को दो बार बंद करने के बराबर है।

HTML में सही संस्करण है

<img src="imgtag.gif" alt="&lt;img&gt;">

और XHTML और XML में सही संस्करण है

<img src="imgtag.gif" alt="&lt;img&gt;"/>

आपके द्वारा दिया गया निम्न उदाहरण भी अमान्य है

<
tag
attr="5"
/>

यह HTML या XML मान्य नहीं है। टैग का नाम '<' के ठीक पीछे होना चाहिए, हालाँकि विशेषताएँ और समापन '>' जहाँ चाहें वहाँ हो सकते हैं। तो वैध XML वास्तव में है

<tag
attr="5"
/>

और यहाँ एक और मजेदार बात है: आप वास्तव में या तो "या 'का उपयोग कर सकते हैं अपने चरित्र को उद्धृत करते हुए

<img src="image.gif" alt='This is single quoted AND valid!'>

पोस्ट किए गए अन्य सभी कारण सही हैं, लेकिन HTML को पार्स करने के साथ सबसे बड़ी समस्या यह है कि लोग आमतौर पर सभी वाक्यविन्यास नियमों को ठीक से नहीं समझते हैं। तथ्य यह है कि आपका ब्राउज़र आपके टैग्स की व्याख्या करता है क्योंकि HTML का मतलब यह नहीं है कि आपने वास्तव में वैध HTML लिखा है।

संपादित करें: और यहां तक ​​कि stackoverflow.com वैध और अमान्य की परिभाषा के बारे में मुझसे सहमत है। आपका अमान्य XML / HTML हाइलाइट नहीं किया गया है, जबकि मेरा सही संस्करण है।

मूल रूप से, XML को regexps के साथ पार्स करने के लिए नहीं बनाया गया है। लेकिन ऐसा करने का कोई कारण भी नहीं है। प्रत्येक भाषा के लिए कई, कई XML पार्सर हैं। आपके पास SAX पार्सर, DOM पार्सर और पुल पार्सर के बीच विकल्प है। इन सभी को रेगेक्सपी के साथ पार्स करने की तुलना में बहुत तेज़ होने की गारंटी दी जाती है और आप परिणामस्वरूप डोम ट्री पर XPath या XSLT जैसी शांत तकनीकों का उपयोग कर सकते हैं।

इसलिए मेरा जवाब है: न केवल एक्सएमएल को रिजेक्स के साथ कड़ी मेहनत से पार्स कर रहा है, बल्कि यह एक बुरा विचार भी है। बस लाखों मौजूदा XML पार्सर में से एक का उपयोग करें, और XML की सभी उन्नत सुविधाओं का लाभ उठाएं।

HTML अभी भी अपने दम पर पार्स करने की कोशिश करने के लिए बहुत मुश्किल है। पहले कानूनी वाक्यविन्यास में बहुत कम सूक्ष्मताएं होती हैं, जिनके बारे में आपको जानकारी नहीं हो सकती है, और दूसरा, HTML में जंगली केवल एक विशाल बदबूदार ढेर है (आपको मेरा बहाव मिलता है)। विभिन्न प्रकार के लैक्स पार्सर लाइब्रेरी हैं जो HTML को टैग सूप की तरह संभालने में अच्छा काम करते हैं, बस इनका उपयोग करें।


8
हालांकि आपको> as> से बचने की जरूरत नहीं है।
जॉय

8
ठीक है, s / मान्य / जंगली / छ
चास

1
वास्तव में, विनिर्देश के अनुसार आपको बचना चाहिए>> जैसा कि आप को बचना चाहिए, जैसा कि <& & amp; और विशेषताएँ "के रूप में & quot; और 'के रूप में & apos; यह सिर्फ इतना है कि कई पार्सर
LordOfThePigs

19
विनिर्देश यह नहीं कहता है कि सामग्री में '>' अनुक्रम के विशेष मामले को छोड़कर> बच जाना चाहिए। इस कारण से हमेशा '>' बचना आसान होता है, लेकिन इसके लिए युक्ति की आवश्यकता नहीं होती।
बोबिन्स

8
>साइन इन करना पूरी तरह से html stackoverflow.com/questions/94528/…
jfs

56

मैंने इस विषय पर पूरी ब्लॉग प्रविष्टि लिखी: नियमित अभिव्यक्ति की सीमाएँ

इस मुद्दे की जड़ यह है कि HTML और XML पुनरावर्ती संरचनाएं हैं जिन्हें ठीक से पार्स करने के लिए गणना तंत्र की आवश्यकता होती है। एक सही रेगेक्स गिनती करने में सक्षम नहीं है। गिनती करने के लिए आपके पास एक संदर्भ मुक्त व्याकरण होना चाहिए।

पिछला पैराग्राफ थोड़ा कैविएट के साथ आता है। कुछ रेगेक्स कार्यान्वयन अब पुनरावृत्ति के विचार का समर्थन करते हैं। हालाँकि एक बार जब आप अपने regex अभिव्यक्तियों में पुनरावृत्ति जोड़ना शुरू करते हैं, तो आप वास्तव में सीमाओं को खींच रहे हैं और एक पार्सर पर विचार करना चाहिए।


20

आपकी सूची में एक गेटा ऐसा नहीं है कि विशेषताएँ किसी भी क्रम में दिखाई दे सकती हैं, इसलिए यदि आपका रेगेक्स href "फू" और क्लास "बार" के साथ लिंक ढूंढ रहा है, तो वे किसी भी क्रम में आ सकते हैं, और किसी भी संख्या में अन्य उनके बीच की बातें।


आह, हाँ, यह भी सवाल था जिसने मुझे यह (पहला लिंक) पूछने के लिए प्रेरित किया।
चास। ओवन्स

16

यह इस बात पर निर्भर करता है कि "पार्सिंग" से आपका क्या मतलब है। सामान्यतया, एक्सएमएल व्याकरण का उपयोग करके XML को पार्स का उपयोग नहीं किया जा सकता है क्योंकि एक्सएमएल व्याकरण नियमित रूप से नहीं है। इसे सीधे शब्दों में कहें, तो रेग्जेस गिनती नहीं कर सकते हैं (अच्छी तरह से, पर्ल रेगेक्स वास्तव में चीजों को गिनने में सक्षम हो सकते हैं) ताकि आप खुले-बंद टैग को संतुलित न कर सकें।


मुझे लगता है कि बैकरेफरेंस खुले और करीबी टैग की समस्या को हल कर सकते हैं
रिशुल मटका

1
@ रिशुलमत: कैसे? आपके पास केवल सीमित संख्या में बैकरेफ़रेन्स हैं और ध्यान दें कि आपको टैग्स को उलटने की आवश्यकता है ... इसके अलावा रेगेक्स की सख्त परिभाषा बैकरेफ़रेन्स की अनुमति नहीं देती है।
विलेम वैन ओन्सेम

.NET अभिव्यक्ति को संतुलित करने की अनुमति देता है, जो पॉप और पुश करता है, और सैद्धांतिक रूप से पदानुक्रम के मिलान के लिए उपयोग किया जा सकता है। लेकिन यह अभी भी एक बुरा विचार है।
हाबिल

9

क्या लोग वास्तव में regex का उपयोग करके गलती कर रहे हैं, या यह केवल उस कार्य के लिए काफी अच्छा है जिसे वे प्राप्त करने की कोशिश कर रहे हैं?

मैं इस बात से पूरी तरह सहमत हूँ कि html और xml को regex का उपयोग करना संभव नहीं है क्योंकि अन्य लोगों ने उत्तर दिया है।

हालाँकि, यदि आपकी आवश्यकता html / xml को पार्स करने के लिए नहीं है, बल्कि html / xml के "ज्ञात अच्छे" बिट में एक छोटे से डेटा को प्राप्त करने के लिए है, तो शायद एक नियमित अभिव्यक्ति या यहां तक ​​कि एक सरल "विकल्प" काफी अच्छा है।


7
"अच्छा पर्याप्त" परिभाषित करें। अनिवार्य रूप से सरल रीगेक्स काम नहीं करेगा। कुछ मेल नहीं खा रहा है या कुछ आप एक बग नहीं होना चाहिए मिलान? यदि ऐसा है तो regexes का उपयोग करना एक गलती है। HTML और XML पार्सर का उपयोग करना मुश्किल नहीं है। उन्हें सीखने से बचना एक गलत अर्थव्यवस्था है।
चास।

1
ठीक है, "अच्छा पर्याप्त" को परिभाषित करें। कहते हैं कि मेरे पास एक वेबपेज है जो मुझे क्लाइंट्स आईपी एड्रेस बताता है। बस इतना ही करता है। अब, मुझे क्लाइंट मशीन के लिए एक आवेदन लिखना होगा जो मुझे अपना आईपी पता बताता है। मैं उस साइट पर जाता हूं, आईपी पते की तलाश करता हूं और इसे वापस करता हूं। HTML पार्स करने की जरूरत नहीं है!
रॉबिन डे

2
यदि आपके पास एक मनमाना स्ट्रिंग है जिसका प्रारूप पूरी तरह से आपके नियंत्रण में है, तो यह तथ्य यह है कि स्ट्रिंग अच्छी तरह से बनाई गई एक्सएमएल वास्तव में प्रासंगिक नहीं है। लेकिन XML के लिए लगभग कोई उपयोग के मामले वास्तव में इस श्रेणी में नहीं आते हैं।
रॉबर्ट रॉसनी

15
मैं आपको दर्दनाक अनुभव से कह सकता हूं कि ज्यादातर समय यह प्राप्त करना संभव है कि आप बेतुका जटिल रेगेक्स पैटर्न का उपयोग करना चाहते हैं। जब तक वेबसाइट एक छोटे से परिवर्तन से नहीं गुजरती है और आप इस regex को फेंक सकते हैं, जिसने आपको खिड़की से दो दिनों के लिए रोना और नए सिरे से शुरू किया।
थॉमसज

@ रॉबर्ट: "लगभग कोई उपयोग के मामले नहीं" एक अतिशयोक्ति है। मेरे अनुभव में सामान्य-पर्याप्त उपयोग के मामले हैं। YAGNI यहां लागू होता है ... कभी-कभी। चाल जान रही है कि आपके द्वारा संबोधित किए जा रहे विशेष कार्य के लिए बुलेटप्रूफ और लंबे समय तक आपके समाधान की आवश्यकता है। रॉबिन के पास एक अच्छी बात है। वह केवल यह कह रहा है कि पूर्ण XML पार्सिंग हमेशा इसके लायक नहीं है ... जो सच है भले ही आप इसका उपयोग करना जानते हों।
लार्स

6

लोग आमतौर पर लालची पैटर्न लिखने के लिए डिफ़ॉल्ट होते हैं, जो अक्सर एक संयुक्त राष्ट्र के माध्यम से पर्याप्त होते हैं। * फ़ाइल के बड़े हिस्से को सबसे बड़े संभव <foo>। * </ Foo> में खिसकाते हैं।


2
पुनरावृत्ति को आलसी बनाने के साथ-साथ .*?<आप एक नकारात्मक चरित्र वर्ग का उपयोग करके इसे ठीक कर सकते हैं [^<]*<। (डिस्क्लेमर: जाहिर है कि यह अभी भी मूर्खतापूर्ण नहीं है, जो सवाल का बिंदु है।)
रोरी ओ'केन

6

मुझे यह कहने के लिए लुभाया जाता है कि "पहिया का फिर से आविष्कार न करें"। सिवाय इसके कि XML एक वास्तव में, वास्तव में जटिल प्रारूप है। तो शायद मुझे कहना चाहिए "सिंक्रोट्रॉन को फिर से मजबूत न करें।"

शायद सही क्लिच शुरू होता है "जब आपके पास एक हथौड़ा होता है ..." आप जानते हैं कि नियमित अभिव्यक्तियों का उपयोग कैसे करें, नियमित अभिव्यक्ति पार्सिंग में अच्छी है, इसलिए एक्सएमएल पार्सिंग लाइब्रेरी सीखने के लिए परेशान क्यों?

क्योंकि XML को पार्स करना कठिन है । XML पार्सिंग लाइब्रेरी का उपयोग करने के लिए सीखने के लिए आपके द्वारा बचाए गए कोई भी प्रयास रचनात्मक कार्य और बग-स्वैटिंग की मात्रा से अधिक होगा जो आपको करना होगा। अपने स्वयं के लिए, Google "XML लाइब्रेरी" और किसी और के काम का लाभ उठाएं।


3
यह C ++ जितना जटिल नहीं है।
कोल जॉनसन

6
@Cole "कोल 9" जॉनसन मैं आरईएस का उपयोग सी ++ को पार्स करने के लिए नहीं करेगा।
आइजैक राबिनोविच

2
यदि XML एक सिंक्रोट्रॉन है, तो C ++ लार्ज हैड्रॉन कोलाइडर होगा।
केविन कोस्टलन 12

4

मेरा मानना ​​है कि इस क्लासिक में वह जानकारी है जिसकी आपको तलाश है। आप वहाँ टिप्पणियों में से एक में बिंदु पा सकते हैं:

मुझे लगता है कि दोष यह है कि HTML एक चॉम्स्की टाइप 2 व्याकरण (संदर्भ मुक्त व्याकरण) है और RegEx एक चॉम्स्की टाइप 3 व्याकरण (नियमित अभिव्यक्ति) है। चूंकि टाइप 3 व्याकरण की तुलना में टाइप 2 व्याकरण मौलिक रूप से अधिक जटिल है - आप संभवतः इस काम को करने की उम्मीद नहीं कर सकते । लेकिन कई लोग कोशिश करेंगे, कुछ सफलता का दावा करेंगे और दूसरे लोग गलती पाएंगे और आपको पूरी तरह से गड़बड़ कर देंगे।

विकिपीडिया: चोमस्की पदानुक्रम से कुछ और जानकारी


6
"रेगुलर एक्सप्रेशन" का औपचारिक व्याकरण चर्चाओं में बिल्कुल वैसा अर्थ नहीं है जैसा यहाँ होता है। ज्यादातर एक्स्टेंट रेगेक्स इंजन चॉम्स्की टाइप 3 व्याकरण (जैसे गैर-लालची मिलान, बैकरेफ्स) की तुलना में अधिक शक्तिशाली हैं। कुछ रेगेक्स इंजन (जैसे पर्ल के) ट्यूरिंग पूर्ण हैं। यह सच है कि HTML को पार्स करने के लिए भी वे खराब उपकरण हैं, लेकिन यह अक्सर उद्धृत तर्क का कारण नहीं है।
दुबेजिम

4

मुझे लगता है कि समस्याओं को उबालने के लिए:

  1. रेगेक्स लगभग हमेशा गलत है। ऐसे वैध इनपुट हैं, जो सही तरीके से मेल नहीं खाएंगे। यदि आप पर्याप्त परिश्रम करते हैं तो आप इसे 99% सही, या 99.999% बना सकते हैं, लेकिन इसे 100% सही बनाना लगभग असंभव है, यदि केवल अजीब चीजों के कारण जो एक्सएमएल संस्थाओं का उपयोग करके अनुमति देता है।

  2. यदि रेगेक्स 0.00001% इनपुट के लिए गलत है, तो आपको सुरक्षा की समस्या है, क्योंकि कोई एक इनपुट खोज सकता है जो आपके एप्लिकेशन को तोड़ देगा।

  3. यदि रेगेक्स 99.99% मामलों को कवर करने के लिए पर्याप्त सही है तो यह पूरी तरह से अपठनीय और अप्राप्य होने वाला है।

  4. यह बहुत संभावना है कि रेगेक्स मध्यम आकार की इनपुट फ़ाइलों पर बहुत खराब प्रदर्शन करेगा। XML के साथ मेरी पहली मुठभेड़ एक पर्ल स्क्रिप्ट को बदलने की थी, जो (गलत तरीके से) एक उचित XML पार्सर के साथ आने वाले XML दस्तावेजों को पार्स कर दिया, और हमने न केवल 300 लाइनों के अपठनीय कोड को 100 लाइनों के साथ बदल दिया, जिसे कोई भी समझ सकता था, लेकिन हमने उपयोगकर्ता प्रतिक्रिया समय में सुधार किया 10 सेकंड से लेकर लगभग 0.1 सेकंड तक।


1

सामान्यतया, एक्सएमएल व्याकरण का उपयोग करके XML को पार्स का उपयोग नहीं किया जा सकता है क्योंकि एक्सएमएल व्याकरण नियमित रूप से नहीं है। इसे सीधे शब्दों में कहें, तो रेग्जेस गिनती नहीं कर सकते हैं (अच्छी तरह से, पर्ल रेगेक्स वास्तव में चीजों को गिनने में सक्षम हो सकते हैं) ताकि आप खुले-बंद टैग को संतुलित न कर सकें।

मैं असहमत हूं। यदि आप regex में पुनरावर्ती का उपयोग करेंगे, तो आप आसानी से खुले और बंद टैग पा सकते हैं।

यहाँ मैंने पहले संदेश में उदाहरणों की पार्सिंग त्रुटियों से बचने के लिए रेगेक्स का उदाहरण दिखाया।


सबसे पहले, पुनरावर्ती regexes नियमित अभिव्यक्ति नहीं हैं (यदि आप कोष्ठक में देखते हैं, तो आप देखेंगे कि मैं मानता हूं कि पर्ल के rexxes, जो पुनरावर्ती हैं, चीजों को गिन सकते हैं, जो HTML को संभालने के लिए आवश्यक है)। दूसरा, आपका उदाहरण एक्सएचटीएमएल या एक्सएमएल के लिए है जो अच्छी तरह से बनता है। HTML अच्छी तरह से नहीं बना है। तीसरा, आपको अपने आप से पूछना होगा, क्या एक पुनरावर्ती रेगेक्स भाषा या सामान्य प्रयोजन प्रोग्रामिंग भाषा में लिखे गए पार्सर को विस्तारित करना और बनाए रखना आसान है।
चास। ओवेन्स

चौथा, यहां तक ​​कि आपका उदाहरण तुच्छ XML होते हुए भी तुच्छ रूप से टूट गया है। Content_block और id के बीच एक स्थान जोड़ें और यह विफल हो जाता है। मुझे यकीन है कि अगर मैंने कुछ और मिनट बिताए तो मुझे आपके कोड में कुछ अन्य संरचनात्मक त्रुटि मिलेगी। यह सिर्फ एक अच्छा विचार नहीं है।
चास। ओवेन्स

1

मैंने यहाँ इस समस्या का एक सरलीकृत उत्तर दिया । हालांकि यह 100% अंक के लिए जिम्मेदार नहीं है, मैं समझाता हूं कि यदि आप कुछ पूर्व प्रसंस्करण कार्य करने के इच्छुक हैं तो यह कैसे संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.