এইচটিএমএল / এক্সএমএল মার্কআপ এবং সামগ্রীগুলিতে বিভক্ত। রেজেক্স কেবলমাত্র একটি লেজিকাল ট্যাগ পার্স করতে দরকারী। আমি অনুমান করি আপনি কন্টেন্টটি কমাতে পারেন। এটি একটি স্যাক্স পার্সারের পক্ষে ভাল পছন্দ হবে। ট্যাগ এবং বিষয়বস্তু কোনও ব্যবহারকারীর সংজ্ঞায়িত ফাংশনে বিতরণ করা যেতে পারে যেখানে নেস্টিং / এলিমেন্টের বন্ধকরণের বিষয়টি লক্ষ্য রাখা যায়।
যতক্ষণ না কেবল ট্যাগগুলি পার্সিং করা যায়, এটি রেইগেক্সের সাহায্যে করা যায় এবং কোনও দস্তাবেজ থেকে ট্যাগ ফেলা করতে ব্যবহৃত হয়।
পরীক্ষার কয়েক বছর ধরে, আমি ব্রাউজারগুলি যেভাবে ভাল এবং অসুস্থ উভয়ভাবেই ফর্ম ট্যাগ ট্যাগ পার্স করার গোপনীয়তা পেয়েছি।
সাধারণ উপাদানগুলি এই ফর্মটির সাথে পার্স করা হয়:
এই ট্যাগগুলির মূলটি এই রেজেক্সটি ব্যবহার করে
(?:
" [\S\s]*? "
| ' [\S\s]*? '
| [^>]?
)+
আপনি এটি লক্ষ্য করবেন [^>]?
এটি বিকল্পগুলির মধ্যে একটি হিসাবে । এটি অসুস্থ-গঠিত ট্যাগগুলির ভারসাম্যহীন উদ্ধৃতিগুলির সাথে মিলবে।
এটি হ'ল, সমস্ত অশুভের একক মূল নিয়মিত প্রকাশেরএটি যেভাবে ব্যবহার করা হয়েছে তা লোভী, সন্তুষ্ট পাত্রের সাথে মেলে অবশ্যই এটি ঘৃণা করার জন্য একটি ঝাঁকুনো দিয়ে ট্রিগার করবে।
যদি নিষ্ক্রিয়ভাবে ব্যবহার করা হয় তবে কোনও সমস্যা হয় না তবে আপনি যদি জোর করেন কোনও ওয়ান্ট্রিটিবিযুক্ত গুণাবলী / মান জুটির সাথে ছেদ করে কোনও কিছুকে মেলে ধরতে এবং ব্যাকট্র্যাকিং থেকে পর্যাপ্ত সুরক্ষা সরবরাহ না করেন তবে এটি নিয়ন্ত্রণের বাইরে থাকা দুঃস্বপ্ন।
এটি কেবল সাধারণ পুরানো ট্যাগগুলির জন্য সাধারণ ফর্ম। [\w:]
ট্যাগ নাম উপস্থাপন লক্ষ্য ? বাস্তবে, ট্যাগ নামের প্রতিনিধিত্বকারী আইনী অক্ষরগুলি ইউনিকোড অক্ষরের একটি অবিশ্বাস্য তালিকা।
<
(?:
[\w:]+
\s+
(?:
" [\S\s]*? "
| ' [\S\s]*? '
| [^>]?
)+
\s* /?
)
>
চলতে চলতে, আমরা আরও দেখতে পাই যে আপনি সমস্ত ট্যাগকে বিশ্লেষণ করেই একটি নির্দিষ্ট ট্যাগ সন্ধান করতে পারবেন না । আমার অর্থ আপনি পারতেন তবে এটিতে (* এসকিআইপি) (* ফেইল) মত ক্রিয়া ক্রিয়াকলাপ ব্যবহার করতে হবে তবে তবুও সমস্ত ট্যাগ পার্স করতে হবে।
কারণটি হ'ল ট্যাগ সিনট্যাক্স অন্যান্য ট্যাগ ইত্যাদির মধ্যে লুকানো থাকতে পারে etc.
সুতরাং, সমস্ত ট্যাগকে নিষ্ক্রিয়ভাবে বিশ্লেষণ করতে, নীচের মত একটি রেজেেক্স প্রয়োজন। এই নির্দিষ্টটি অদৃশ্য সামগ্রীর সাথেও মেলে ।
নতুন এইচটিএমএল বা এক্সএমএল বা অন্য যে কোনও নতুন কন্সট্রাক্টগুলি বিকাশ করে, কেবল এটিকে বিকল্পগুলির একটি হিসাবে যুক্ত করুন।
ওয়েব পৃষ্ঠার দ্রষ্টব্য - আমি কোনও ওয়েব পৃষ্ঠা (বা এক্সএইচটিএমএল / এক্সএমএল) কখনও দেখিনি যা এর
সাথে সমস্যা হয়েছিল। যদি আপনি একটি সন্ধান করেন তবে আমাকে জানান।
পারফরম্যান্স নোট - এটি দ্রুত। এটি আমি দেখেছি দ্রুততম ট্যাগ পার্সার
(দ্রুত হতে পারে, কে জানে)।
আমার বেশ কয়েকটি নির্দিষ্ট সংস্করণ রয়েছে। এটি স্ক্র্যাপার হিসাবেও দুর্দান্ত
(যদি আপনি হ্যান্ড-অন টাইপের হন)।
সম্পূর্ণ কাঁচা regex
<(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\s+(?>"[\S\s]*?"|'[\S\s]*?'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</\1\s*(?=>))|(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]?)+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>
ফর্ম্যাট চেহারা
<
(?:
(?:
(?:
# Invisible content; end tag req'd
( # (1 start)
script
| style
| object
| embed
| applet
| noframes
| noscript
| noembed
) # (1 end)
(?:
\s+
(?>
" [\S\s]*? "
| ' [\S\s]*? '
| (?:
(?! /> )
[^>]
)?
)+
)?
\s* >
)
[\S\s]*? </ \1 \s*
(?= > )
)
| (?: /? [\w:]+ \s* /? )
| (?:
[\w:]+
\s+
(?:
" [\S\s]*? "
| ' [\S\s]*? '
| [^>]?
)+
\s* /?
)
| \? [\S\s]*? \?
| (?:
!
(?:
(?: DOCTYPE [\S\s]*? )
| (?: \[CDATA\[ [\S\s]*? \]\] )
| (?: -- [\S\s]*? -- )
| (?: ATTLIST [\S\s]*? )
| (?: ENTITY [\S\s]*? )
| (?: ELEMENT [\S\s]*? )
)
)
)
>