এইচটিএমএল পার্স করতে নিয়মিত এক্সপ্রেশন ব্যবহার করে: কেন নয়?


207

এটি স্ট্যাকওভারফ্লো সম্পর্কিত প্রতিটি প্রশ্নের মতোই মনে হয় যেখানে প্রশ্নকারী এইচটিএমএল থেকে কিছু তথ্য দখল করার জন্য রেজেক্স ব্যবহার করছেন অনিবার্যভাবে একটি "উত্তর" থাকবে যা বলে যে এইচটিএমএল পার্স করতে রেজেক্স ব্যবহার করবেন না।

কেন না? আমি সচেতন মূল্যউদ্ধৃতি-উদ্ধতি "বাস্তব" এইচটিএমএল পারজার মত সেখানে আউট আছে আছি সুন্দর স্যুপ , এবং আমি নিশ্চিত তারা শক্তিশালী এবং দরকারী, কিন্তু আপনি হয়তো এইমাত্র কিছু সহজ করছেন, দ্রুত, বা মলিন নই, তাহলে কেন কিছু জটিল রেজেক্সের বিবৃতি ঠিক কাজ করবে তখন এত জটিল কিছু ব্যবহার করতে বিরক্ত করবেন?

তদুপরি, এখানে কি এমন কিছু মৌলিক বিষয় রয়েছে যা আমি রেইগেক্স সম্পর্কে বুঝতে পারি না যা তাদেরকে সাধারণভাবে পার্স করার জন্য খারাপ পছন্দ করে?


3
আমি মনে করি এই একটি প্রতারিত হয় stackoverflow.com/questions/133601
jcrossley3

23
কারণ শুধুমাত্র চাক নরিস পারেন পার্স এইচটিএমএল Regex সঙ্গে (: এই বিখ্যাত Zalgo জিনিস ব্যাখ্যা stackoverflow.com/questions/1732348/... )।
তাকেশিন

1
এই প্রশ্নটি আমাকে অন্য কোনওটি জিজ্ঞাসা করতে উত্সাহিত করেছিল যা কোনওভাবে সম্পর্কিত। আপনি যদি আগ্রহী হন তবে: কেন এইচটিএমএল / এক্সএমএলকে পার্স করতে রেগেক্স ব্যবহার করা সম্ভব নয়: সাধারণ লোকের শর্তাদির একটি আনুষ্ঠানিক ব্যাখ্যা
ম্যাক


এই প্রশ্নটি "সাধারণ বৈধকরণ কার্যাদি" এর অধীনে স্ট্যাক ওভারফ্লো নিয়মিত এক্সপ্রেশন FAQ এ যুক্ত করা হয়েছে ।
aliteralmind

উত্তর:


212

নিয়মিত এক্সপ্রেশন দিয়ে পুরো এইচটিএমএল পার্সিং করা সম্ভব নয়, কারণ এটি খোলার সাথে এবং ক্লোজিং ট্যাগের সাথে মিলে যায় যা রিজেক্সপসের সাহায্যে সম্ভব নয়।

রেগুলার এক্সপ্রেশন শুধুমাত্র মেলাতে পারে নিয়মিত ভাষায় কিন্তু এইচটিএমএল একটি হল প্রেক্ষাপটে মুক্ত ভাষা এবং না একটি নিয়মিত ভাষা (যেমন @StefanPochmann নির্দিষ্ট, নিয়মিত ভাষাও, প্রসঙ্গ-মুক্ত, তাই প্রেক্ষাপটে মুক্ত অগত্যা নিয়মিত না মানে এই নয়)। এইচটিএমএল-এ রিজেেক্সপ্সের সাহায্যে একমাত্র আপনি যা করতে পারেন তা হিউরিস্টিকস তবে এটি প্রতিটি শর্তে কাজ করবে না। কোনও এইচটিএমএল ফাইল উপস্থাপন করা সম্ভব হবে যা কোনও নিয়মিত অভিব্যক্তি দ্বারা ভুলভাবে মিলে যায়।


26
এখন পর্যন্ত সেরা উত্তর। যদি এটি কেবল নিয়মিত ব্যাকরণের সাথেই মেলে তবে আমাদের এইচটিএমএল-এর মতো প্রসঙ্গমুক্ত ব্যাকরণকে বিশ্লেষণ করার জন্য একটি অসীম বড় রিগেক্সেপ প্রয়োজন। আমি পছন্দ করি যখন এই বিষয়গুলির স্পষ্ট তাত্ত্বিক উত্তর থাকে।
ntownsend

2
আমি ধরে নিয়েছিলাম আমরা পার্ল-টাইপ রেজিক্সগুলি নিয়ে আলোচনা করছি যেখানে তারা আসলে নিয়মিত প্রকাশ নয়।
হ্যাঙ্ক গে

5
প্রকৃতপক্ষে। নেট নিয়মিত এক্সপ্রেশন কিছুটা ব্যালেন্সিং গ্রুপ এবং একটি সাবধানতার সাথে খোদাই করা এক্সপ্রেশন ব্যবহার করে ক্লোজিং ট্যাগগুলির সাথে খোলার সাথে মেলে। ধারণকারী সব কোন RegExp যে এখনও অবশ্যই পাগল, এটা মহান কোড Chtulhu মত দেখাবে এবং সম্ভবত পাশাপাশি বাস্তব এক তলব করবে। এবং শেষ পর্যন্ত এটি এখনও সব ক্ষেত্রে কাজ করে না। তারা বলেছে যে আপনি যদি একটি নিয়মিত ভাব প্রকাশ করেন যা কোনও HTMLকে সঠিকভাবে বিশ্লেষণ করতে পারে তবে মহাবিশ্ব নিজেই ভেঙে পড়বে।
অ্যালেক্স পাভেন

5
কিছু রিজেক্স লিবগুলি পুনরাবৃত্ত নিয়মিত অভিব্যক্তি করতে পারে (কার্যকরভাবে তাদের অ-নিয়মিত অভিব্যক্তি তৈরি করে :)
ওন্দ্রা Žižka

43
-1 এই উত্তরটি সঠিক যুক্তিটি ("রিজেক্সের সাহায্যে এইচটিএমএলকে পার্স করা খারাপ ধারণা") আঁকায় ("কারণ এইচটিএমএল কোনও নিয়মিত ভাষা নয়")। জিনিস যে অধিকাংশ লোক আজকাল মানে যখন তারা বলে "Regex" (PCRE) ভাল সক্ষম না শুধুমাত্র প্রেক্ষাপটে মুক্ত ব্যাকরণ (যে আসলে তুচ্ছ থাকবে) পার্স এর, কিন্তু প্রসঙ্গ-সংবেদী ব্যাকরণ এর (দেখুন stackoverflow.com/questions/7434272/ … )।
নিকিসি

35

Quick´n´dirty জন্য regexp জরিমানা করতে হবে। তবে জানার মূল বিষয়টি হ'ল এইচটিএমএলকে সঠিকভাবে বিভক্ত করবে এমন একটি রেজিএক্সপ্যাক নির্মাণ করা অসম্ভব

কারণটি হ'ল রেগেক্সপ্সগুলি নির্বিচারে নেস্টেড এক্সপ্রেশনগুলি পরিচালনা করতে পারে না। দেখুন নিয়মিত প্রকাশগুলি নেস্টেড নিদর্শনগুলির সাথে মেলে ব্যবহার করা যেতে পারে?


1
কিছু রিজেক্স লিবগুলি পুনরাবৃত্ত নিয়মিত অভিব্যক্তি করতে পারে (কার্যকরভাবে তাদের অ-নিয়মিত প্রকাশ করে তোলে :)
ওন্দ্রা Žižka

23

( Http://htmlparsing.com/regexes থেকে )

বলুন যে আপনি এইচটিএমএল ফাইল পেয়েছেন যেখানে আপনি <img> ট্যাগ থেকে URL গুলি বের করার চেষ্টা করছেন।

<img src="http://example.com/whatever.jpg">

সুতরাং আপনি পার্লে এর মতো একটি রেজেেক্স লিখুন:

if ( $html =~ /<img src="(.+)"/ ) {
    $url = $1;
}

এই ক্ষেত্রে, $urlঅবশ্যই থাকবে http://example.com/whatever.jpg। আপনি যখন এইচটিএমএল পেতে শুরু করেন তখন কী ঘটে:

<img src='http://example.com/whatever.jpg'>

অথবা

<img src=http://example.com/whatever.jpg>

অথবা

<img border=0 src="http://example.com/whatever.jpg">

অথবা

<img
    src="http://example.com/whatever.jpg">

বা আপনি থেকে মিথ্যা ইতিবাচক পেতে শুরু

<!-- // commented out
<img src="http://example.com/outdated.png">
-->

এটি দেখতে খুব সহজ দেখাচ্ছে, এবং এটি একক, অপরিবর্তনীয় ফাইলের জন্য সহজ হতে পারে তবে যে কোনও কিছুর জন্য আপনি স্বেচ্ছাসেবী এইচটিএমএল ডেটা করছেন, রিজেক্সগুলি ভবিষ্যতের ব্যথার জন্য একটি রেসিপি মাত্র।


4
এটি আসল উত্তর বলে মনে হচ্ছে - যদিও সম্ভবত রেগেক্সের সাথে নির্বিচারে এইচটিএমএল পার্স করা সম্ভব যেহেতু আজকের রেগেক্সগুলি সীমাবদ্ধ এইচটিএমএলকে পার্স করার জন্য এবং কেবলমাত্র একটি কংক্রিট পৃষ্ঠাকে নয়, আপনাকে রেজিএক্সএমে এইচটিএমএল পার্সার পুনরায় সংশোধন করতে হবে এবং রিজেক্সগুলি অবশ্যই 1000 বার অপঠনযোগ্য হয়ে যায়।
স্মিথ জন্থ

1
ওহে অ্যান্ডি, আমি আপনার মতামতযুক্ত কেসকে সমর্থন করে এমন একটি অভিব্যক্তি প্রকাশ করতে সময় নিয়েছি। stackoverflow.com/a/40095824/1204332 আপনি কি মনে করেন আমাকে জানান! :)
ইভান চায়ার

2
এই উত্তরে যুক্তি পথ পুরানো, এবং এমনকি কম আজ তুলনায় এটি মূলত করেনি (যা আমি মনে করি এটা না) প্রযোজ্য। (ওপিকে উদ্ধৃত করে: "আপনি যদি কিছু সহজ, দ্রুত বা নোংরা কিছু করেন ..."))
জেড।

16

দুটি দ্রুত কারণ:

  • দূষিত ইনপুটটিতে দাঁড়াতে পারে এমন একটি রেজেক্স লেখা শক্ত; প্রাক বিল্ট টুল ব্যবহারের চেয়ে শক্ত উপায়
  • এমন একটি রেজেক্স লেখা যা হাস্যকর মার্কআপটির সাথে কাজ করতে পারে যা আপনি অবশ্যম্ভাবীভাবে আটকে যাবেন এটি শক্ত is প্রাক বিল্ট টুল ব্যবহারের চেয়ে শক্ত উপায়

সাধারণভাবে পার্সিংয়ের জন্য রেগেক্সেসের উপযুক্ততার বিষয়ে: এগুলি উপযুক্ত নয়। আপনি কি বেশিরভাগ ভাষাগুলি বিশ্লেষণ করার জন্য বিভিন্ন ধরণের রেজিটিক্স দেখেছেন?


2
কি দারুন? 2+ বছর পরে একটি ডাউনভোট? কেউ যদি ভাবছিল, আমি "কারণ এটি তাত্ত্বিকভাবে অসম্ভব" বলিনি কারণ প্রশ্নটি "দ্রুত এবং নোংরা" সম্পর্কে স্পষ্টভাবে জিজ্ঞাসা করেছে, "সঠিক" নয়। তাত্ত্বিকভাবে অসম্ভব অঞ্চলটি coveredেকে দেওয়া ওপি ইতিমধ্যে পরিষ্কারভাবে উত্তরগুলি পড়েছে এবং এখনও সন্তুষ্ট হয়নি।
হ্যাঙ্ক গে

1
5+ বছর পরে একটি উপভোগ করুন। :) আপনি কেন ডাউনটোটটি পেয়েছেন, তবে আমি বলার যোগ্য নই, তবে ব্যক্তিগতভাবে, আমি সমাধিক বক্তৃতামূলক প্রশ্নের চেয়ে কিছু উদাহরণ বা ব্যাখ্যা দেখতে পছন্দ করতাম।
অ্যাডাম জেনসেন

3
মূলত শিপিং পণ্য বা অভ্যন্তরীণ সরঞ্জামগুলিতে করা সমস্ত দ্রুত এবং নোংরা এইচটিএমএল পার্সিং একটি ফাঁকানো সুরক্ষা গর্ত, বা ত্রুটি হওয়ার জন্য অপেক্ষা করতে শুরু করে। এড়াতে অবশ্যই নিরুৎসাহিত করতে হবে। যদি কেউ একটি রেজেক্স ব্যবহার করতে পারে, তবে কেউ সঠিক এইচটিএমএল পার্সার ব্যবহার করতে পারেন।
মনিকা 20

16

যতদূর পার্সিং যায়, নিয়মিত এক্সপ্রেশনগুলি "লেক্সিকাল অ্যানালাইসিস" (লেক্সার) পর্যায়ে কার্যকর হতে পারে, যেখানে ইনপুটটি টোকনে বিভক্ত হয়ে যায়। এটি প্রকৃত "পার্স গাছ তৈরি করুন" পর্যায়ে কম দরকারী।

এইচটিএমএল পার্সারের জন্য, আমি এটি কেবল সুগঠিত এইচটিএমএল গ্রহণ করার প্রত্যাশা করতাম এবং এর জন্য নিয়মিত অভিব্যক্তি যা করতে পারে তার বাইরে দক্ষতার প্রয়োজন হয় (তারা "গণনা করতে পারে না" এবং নিশ্চিত হওয়া যে খোলার উপাদানগুলির একটি নির্দিষ্ট সংখ্যা একই সংখ্যা দ্বারা ভারসাম্যযুক্ত) সমাপ্তির উপাদানগুলির)।


8

কারণ এইচটিএমএলকে "স্ক্রু আপ" করার অনেকগুলি উপায় রয়েছে যা ব্রাউজারগুলি বরং উদার উপায়ে আচরণ করবে তবে নিয়মিত প্রকাশের সাথে সমস্ত ক্ষেত্রে আবশ্যকভাবে ব্রাউজারের উদার আচরণটি পুনরুত্পাদন করতে বেশ কিছু প্রচেষ্টা লাগবে, তাই আপনার রেজেক্স অবশ্যম্ভাবীভাবে কিছু বিশেষ ক্ষেত্রে ব্যর্থ হবে কেসগুলি এবং এটি সম্ভবত আপনার সিস্টেমে গুরুতর সুরক্ষা ব্যবস্থাগুলি প্রবর্তন করবে।


1
খুব সত্য, বেশিরভাগ এইচটিএমএলকে ভয়ঙ্কর বলে মনে হচ্ছে। আমি বুঝতে পারি না যে একটি ব্যর্থ নিয়মিত অভিব্যক্তি গুরুতর সুরক্ষার ব্যবধানগুলি কীভাবে প্রবর্তন করতে পারে। আপনি কি একটি উদাহরণ দিতে পারেন?
ntownsend

4
নাটাউনসেন্ড: উদাহরণস্বরূপ, আপনি ভাবেন যে আপনি সমস্ত স্ক্রিপ্ট ট্যাগটি এইচটিএমএল থেকে সরিয়ে ফেলেছেন তবে আপনার রেজিএক্স ব্যর্থ হয়েছে একটি বিশেষ কেস কভার করে (যে, ধরা যাক, কেবলমাত্র আইআই 6 তে কাজ করে): বুম, আপনি একটি এক্সএসএস অবিচ্ছিন্নতা পেয়েছেন!
তামাস সিজনেজে

1
এটি একটি কঠোর অনুমানমূলক উদাহরণ ছিল যেহেতু বেশিরভাগ বাস্তব বিশ্বের উদাহরণগুলি এই মন্তব্যের সাথে মানিয়ে নিতে খুব জটিল তবে আপনি এই বিষয়টিতে দ্রুত গুগল করে কয়েকটি খুঁজে পেতে পারেন।
তামাস সিজনে

3
সুরক্ষা কোণ উল্লেখ করার জন্য +1। আপনি যখন পুরো ইন্টারনেটের সাথে ইন্টারফেস করছেন তখন আপনি হ্যাকি "বেশিরভাগ সময় কাজ করে" কোড লেখার সামর্থ্য রাখেন না।
j_random_hacker

7

সমস্যাটি হ'ল বেশিরভাগ ব্যবহারকারী যারা এইচটিএমএল এবং রেজেক্সের সাথে একটি প্রশ্ন জিজ্ঞাসা করেন তারা এটি করেন কারণ তারা কাজ করে এমন কোনও নিজস্ব রেজেক্স আবিষ্কার করতে পারেন না। তারপরে একজনকে ভাবতে হবে যে কোনও ডম বা স্যাক্স পার্সার বা এর অনুরূপ কিছু ব্যবহার করার সময় সবকিছু সহজ হবে কিনা। এক্সএমএলের মতো নথির কাঠামোর সাথে কাজ করার উদ্দেশ্যে তারা অনুকূলিত এবং নির্মিত হয়।

অবশ্যই, এমন সমস্যা রয়েছে যা নিয়মিত প্রকাশের মাধ্যমে সহজেই সমাধান করা যায়। তবে জোর খুব সহজেই থাকে

আপনি যদি কেবলমাত্র সমস্ত URL টি দেখতে চান তবে দেখতে দেখতে http://.../আপনি ঠিকঠাক হয়ে গেছেন re তবে আপনি যদি 'মাইলিংক' ক্লাসযুক্ত একটি এলিমেন্টে থাকা সমস্ত ইউআরএলগুলি সন্ধান করতে চান তবে আপনি সম্ভবত উপযুক্ত পার্সার ব্যবহার করতে পারেন।


6

নিয়মিত প্রকাশগুলি কোনও নেস্টেড ট্যাগ কাঠামো পরিচালনা করার জন্য ডিজাইন করা হয়নি এবং আপনি প্রকৃত এইচটিএমএল দ্বারা প্রাপ্ত সম্ভাব্য প্রান্তের সমস্ত ক্ষেত্রে পরিচালনা করা সবচেয়ে জটিল (সবচেয়ে খারাপ, অসম্ভব) is


6

আমি বিশ্বাস করি যে উত্তরটি গণনা তত্ত্বের মধ্যে রয়েছে। রেগেক্স ব্যবহার করে কোনও ভাষা পার্স করার জন্য এটি অবশ্যই "নিয়মিত" ( লিঙ্ক ) সংজ্ঞা দ্বারা হওয়া উচিত । এইচটিএমএল কোনও নিয়মিত ভাষা নয় কারণ এটি নিয়মিত ভাষার জন্য অনেকগুলি মানদণ্ড পূরণ করে না (এইচটিএমএল কোডের অন্তর্নিহিত বিভিন্ন স্তরের নেস্টিংয়ের সাথে অনেক কিছু করা যায়)। আপনি যদি গণনা তত্ত্বটিতে আগ্রহী হন তবে আমি এই বইয়ের সুপারিশ করব ।


1
আমি আসলে বইটি পড়েছি। এইমাত্র আমার কাছে ঘটেনি যে এইচটিএমএল একটি প্রসঙ্গ-মুক্ত ভাষা।
ntownsend

4

এই অভিব্যক্তিটি HTML উপাদান থেকে বৈশিষ্ট্যগুলি পুনরুদ্ধার করে। এটি সমর্থন করে:

  • উদ্ধৃত / উদ্ধৃত বৈশিষ্ট্য,
  • একক / ডাবল উদ্ধৃতি,
  • বৈশিষ্ট্যগুলির ভিতরে উদ্ধৃতিগুলি,
  • সমান চিহ্নগুলির চারপাশে ফাঁকা স্থান
  • বৈশিষ্ট্য যে কোনও সংখ্যা,
  • ট্যাগের ভিতরে থাকা বৈশিষ্ট্যের জন্য শুধুমাত্র পরীক্ষা করুন,
  • মন্তব্য এড়ানো, এবং
  • একটি বৈশিষ্ট্য মানের মধ্যে বিভিন্ন উদ্ধৃতি পরিচালনা করুন।

(?:\<\!\-\-(?:(?!\-\-\>)\r\n?|\n|.)*?-\-\>)|(?:<(\S+)\s+(?=.*>)|(?<=[=\s])\G)(?:((?:(?!\s|=).)*)\s*?=\s*?[\"']?((?:(?<=\")(?:(?<=\\)\"|[^\"])*|(?<=')(?:(?<=\\)'|[^'])*)|(?:(?!\"|')(?:(?!\/>|>|\s).)+))[\"']?\s*)

এটি পরীক্ষা করে দেখুন । ডেমোর মতো এটি "গিসেক্স" পতাকাগুলির সাথে আরও ভাল কাজ করে।


1
এটা খুব আকর্ষণীয়। পাঠযোগ্য নয়, সম্ভবত ডিবাগ করা শক্ত কিন্তু এখনও: চিত্তাকর্ষক কাজ!
এরিক ডুমিনিল

এটি এখনও অস্পষ্টভাবে ধরে নিয়েছে যে এইচটিএমএলটি সুগঠিত ,. প্রসঙ্গ ম্যাচিং ব্যতীত এটি প্রাসঙ্গিকগুলিতে আপাত ইউআরএলগুলির সাথে মিলবে যেখানে আপনি সাধারণত কোনও <script>ট্যাগের মধ্যে জাভাস্ক্রিপ্ট কোডের টুকরো যেমন সেগুলি মেলাতে চান না ।
ট্রিপলি

4

এইচটিএমএল / এক্সএমএল মার্কআপ এবং সামগ্রীগুলিতে বিভক্ত। রেজেক্স কেবলমাত্র একটি লেজিকাল ট্যাগ পার্স করতে দরকারী। আমি অনুমান করি আপনি কন্টেন্টটি কমাতে পারেন। এটি একটি স্যাক্স পার্সারের পক্ষে ভাল পছন্দ হবে। ট্যাগ এবং বিষয়বস্তু কোনও ব্যবহারকারীর সংজ্ঞায়িত ফাংশনে বিতরণ করা যেতে পারে যেখানে নেস্টিং / এলিমেন্টের বন্ধকরণের বিষয়টি লক্ষ্য রাখা যায়।

যতক্ষণ না কেবল ট্যাগগুলি পার্সিং করা যায়, এটি রেইগেক্সের সাহায্যে করা যায় এবং কোনও দস্তাবেজ থেকে ট্যাগ ফেলা করতে ব্যবহৃত হয়।

পরীক্ষার কয়েক বছর ধরে, আমি ব্রাউজারগুলি যেভাবে ভাল এবং অসুস্থ উভয়ভাবেই ফর্ম ট্যাগ ট্যাগ পার্স করার গোপনীয়তা পেয়েছি।

সাধারণ উপাদানগুলি এই ফর্মটির সাথে পার্স করা হয়:

এই ট্যাগগুলির মূলটি এই রেজেক্সটি ব্যবহার করে

 (?:
      " [\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]*? )
           )
      )
 )
 >

3

যদিও "এটি নির্ভর করে"। এটি সত্য যে রেজেক্সসরা এখানে প্রদত্ত সমস্ত কারণে সত্য নির্ভুলতার সাথে এইচটিএমএলকে পার্স করতে পারে না এবং করতে পারে না। তবে, যদি এটির ভুল হওয়ার পরিণতি (যেমন নেস্টেড ট্যাগগুলি পরিচালনা না করা) সামান্য হয় এবং যদি আপনার পরিবেশে রেজেক্সগুলি অতি সুবিধাজনক হয় (যেমন আপনি যখন পার্ল হ্যাক করছেন) তখন এগিয়ে যান।

মনে করুন আপনি ওহ, সম্ভবত আপনার সাইটের সাথে লিঙ্কযুক্ত ওয়েব পৃষ্ঠাগুলি পার্স করছেন - সম্ভবত আপনি সেগুলি গুগলের লিঙ্ক অনুসন্ধানের সাথে পেয়েছেন - এবং আপনার লিঙ্কটি ঘিরে প্রসঙ্গটির একটি সাধারণ ধারণা পাওয়ার জন্য আপনি দ্রুত উপায় চান। আপনি একটি সামান্য প্রতিবেদন চালানোর চেষ্টা করছেন যা স্প্যামকে লিঙ্ক করতে আপনাকে সতর্ক করতে পারে, এরকম কিছু।

সেক্ষেত্রে কিছু দস্তাবেজকে ভুলভাবে ভাগ করা বড় ব্যাপার হবে না। আপনি ছাড়া আর কেউই ভুলগুলি দেখতে পাবেন না এবং আপনি যদি খুব ভাগ্যবান হন তবে আলাদা আলাদাভাবে অনুসরণ করতে পারার মতো খুব কম পরিমাণে থাকবেন।

আমার ধারণা আমি এটি একটি ট্রেড অফ বলছি। কখনও কখনও সঠিক পার্সার প্রয়োগ বা প্রয়োগ করা - যতটা সহজ হতে পারে - যথার্থতা গুরুত্বপূর্ণ না হলে সমস্যাটি উপযুক্ত হবে না।

আপনার অনুমানগুলি নিয়ে কেবল সাবধান হন। আমি যদি জনসম্মুখে প্রদর্শিত হবে এমন কোনও কিছুকে বিশ্লেষণের চেষ্টা করছেন তবে রেজিএক্সএক্স শর্টকাটটি ব্যাকফায়ার করতে পারে এমন কয়েকটি উপায় সম্পর্কে আমি ভাবতে পারি।


3

এইচটিএমএল থেকে কিছু তথ্য বিশ্লেষণের জন্য নিয়মিত প্রকাশটি ব্যবহার করা সঠিকভাবে সঠিকভাবে দেখা যায় - এটি নির্দিষ্ট পরিস্থিতির উপর অনেক কিছু নির্ভর করে।

উপরোক্ত sensকমত্যটি সাধারণভাবে এটি একটি খারাপ ধারণা। তবে যদি এইচটিএমএল কাঠামোটি জানা থাকে (এবং পরিবর্তনের সম্ভাবনা নেই) তবে এটি এখনও একটি বৈধ পন্থা।


3

মনে রাখবেন যে এইচটিএমএল নিজেই নিয়মিত নয়, আপনি যে পৃষ্ঠার সন্ধান করছেন সেগুলির অংশগুলি নিয়মিত হতে পারে।

উদাহরণস্বরূপ, <form>ট্যাগগুলি নেস্ট করাতে এটি ত্রুটি ; যদি ওয়েব পৃষ্ঠাটি সঠিকভাবে কাজ করছে, তবে এটি ধরতে নিয়মিত এক্সপ্রেশন ব্যবহার <form>করা সম্পূর্ণ যুক্তিসঙ্গত হবে।

আমি সম্প্রতি কেবল সেলেনিয়াম এবং নিয়মিত এক্সপ্রেশন ব্যবহার করে কিছু ওয়েব স্ক্র্যাপিং করেছি। আমি এটা দিয়ে দূরে পেয়েছিলাম কারণ আমি যে ডেটা চেয়েছিলেন একটি করা হয় <form>, এবং একটি সহজ টেবিল বিন্যাস রাখা (তাই আমি এমনকি উপর নির্ভর করতে পারে <table>, <tr>এবং <td>অ নেস্টেড হতে - যা আসলে অত্যন্ত অস্বাভাবিক)। কিছুটা ডিগ্রীতে নিয়মিত প্রকাশগুলি এমনকি প্রায় প্রয়োজনীয় ছিল, কারণ আমার যে কাঠামোটি অ্যাক্সেস করার প্রয়োজন ছিল তার কয়েকটি মন্তব্য দ্বারা সীমিত করা হয়েছিল। (সুন্দর স্যুপ আপনাকে মন্তব্য করতে পারে, তবে সুন্দর স্যুপ ব্যবহার করে দখল করা <!-- BEGIN -->এবং <!-- END -->ব্লক করা কঠিন হত ))

আমি যদি নেস্টেড টেবিলগুলি নিয়ে চিন্তা করতে পারি তবে আমার দৃষ্টিভঙ্গিটি কেবল কাজ করে না! আমাকে আবার বিউটিফুল স্যুপের উপরে পড়তে হত। তারপরেও, তবে, কখনও কখনও আপনি আপনার প্রয়োজনমতো অংশটি ধরতে নিয়মিত প্রকাশ করতে পারেন এবং সেখান থেকে নীচে ড্রিল করতে পারেন।


2

আসলে, রেজেক্সের সাথে এইচটিএমএল পার্সিং পিএইচপি-তে পুরোপুরি সম্ভব। নেস্টেড ট্যাগগুলি পেতে প্রতিবার ungreedy স্পেসিফায়ার্স ব্যবহার করে সেখান থেকে রেজেক্স strrposসন্ধান <এবং পুনরাবৃত্তি করে আপনাকে কেবল পুরো স্ট্রিংটিকে পিছনের দিকে পার্স করতে হবে। বড় বড় জিনিসগুলিতে অভিনব এবং মারাত্মকভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে। আমি আসলে এইচটিএমএলকে পার্সিং করছিলাম না, তবে ডেটা সারণি প্রদর্শনের জন্য ডাটাবেস এন্ট্রিগুলি জিজ্ঞাসা করার জন্য আমি কয়েকটি কাস্টম ট্যাগ তৈরি করেছি (আমার <#if()>ট্যাগটি এইভাবে বিশেষ এন্ট্রিগুলিকে হাইলাইট করতে পারে)। আমি এখানে এবং সেখানে কেবলমাত্র কয়েকটি স্ব-নির্মিত ট্যাগ (একটি এক্স-এক্সএমএল ডেটা সহ) কয়েকটি এক্সএমএল পার্সারে যাওয়ার জন্য প্রস্তুত ছিলাম না।

সুতরাং, যদিও এই প্রশ্নটি যথেষ্ট মারা গেছে, এটি এখনও গুগল অনুসন্ধানে প্রদর্শিত হয়। আমি এটি পড়েছি এবং "চ্যালেঞ্জ গ্রহণযোগ্য" ভেবেছিলাম এবং সবকিছু প্রতিস্থাপন না করেই আমার সাধারণ কোডটি ঠিক করে শেষ করেছি। অনুরূপ কারণে অনুসন্ধান করে যে কাউকে আলাদা মতামত দেওয়ার সিদ্ধান্ত নিয়েছে। এছাড়াও শেষ উত্তর 4 ঘন্টা আগে পোস্ট করা হয়েছিল তাই এটি এখনও একটি উত্তপ্ত বিষয়।


2
একটি বিশ্বাসযোগ্য ধারণা প্রস্তাব করার জন্য -1। আপনি ট্যাগ এবং সমাপনী কোণ বন্ধনী মধ্যে সাদা স্থান বিবেচনা? (উদাহরণস্বরূপ <tag >) আপনি মন্তব্য-আউট ক্লোজিং ট্যাগ বিবেচনা করেছেন? (যেমন, <tag> <!-- </tag> -->) আপনি সিডিএটিএ বিবেচনা করেছেন? আপনি কি বেমানান-কেস ট্যাগগুলি বিবেচনা করেছেন? (যেমন, <Tag> </tAG>) আপনি বিবেচনা করে দেখেছেন এই পাশাপাশি?
রমুন

1
আপনার কয়েকটি কাস্টম ট্যাগের বিশেষ ক্ষেত্রে, হ্যাঁ, নিয়মিত প্রকাশগুলি ভালভাবে কাজ করে। সুতরাং এটি যে আপনার সেগুলি আপনার বিশেষ ক্ষেত্রে একটি ভুল ছিল না । যদিও এটি এইচটিএমএল নয়, এবং "পিএইচপি-র সাথে রেজেক্সের সাথে এইচটিএমএল পার্সিং করা পুরোপুরি সম্ভব" বলা ঠিক ফ্ল্যাট-আউট মিথ্যা, এবং একটি ভয়ঙ্কর ধারণা। আসল এইচটিএমএল এর অসঙ্গতিগুলি (এবং আমি তালিকাবদ্ধ কয়েকজনের চেয়ে অনেক বেশি উপায় রয়েছে) কেন আপনি কখনই নিয়মিত অভিব্যক্তি সহ সত্যিকারের এইচটিএমএলকে পার্স করবেন না। দেখুন, ভাল, এই প্রশ্নের অন্যান্য সমস্ত উত্তর, সেই সাথে আমি উপরে আমার অন্যান্য মন্তব্যে যার সাথে লিঙ্ক করেছি।
রমুন

2
পিএইচপি একটি টিউরিং-সম্পূর্ণ ভাষা, সুতরাং এটি মোটেও মিথ্যা নয়। এইচটিএমএল পার্সিং সহ গণনাগতভাবে সমস্ত কিছু সম্ভব। ট্যাগগুলিতে থাকা স্পেসগুলি কোনও সমস্যা ছিল না এবং আমি তখন থেকে ট্যাগের উপাদানগুলিকে তালুতে তালিকায় এটিকে মানিয়ে নিয়েছি। আমার ব্যবহারটি অসম্পূর্ণ কেসিং সহ স্বয়ংক্রিয়ভাবে ট্যাগগুলি সংশোধন করেছে, প্রথম পর্যায়ে মন্তব্য করা স্ট্রিপগুলি কেটে ফেলা হয়েছে এবং পরে কিছু সংযোজনের পরে সমস্ত ধরণের ট্যাগ সহজেই যুক্ত করা যায় (যদিও এটি নিজের পছন্দ অনুসারে ক্ষেত্রে সংবেদনশীল)। এবং আমি দৃ sure়ভাবে নিশ্চিত যে সিডিএটিএটি আসলে একটি এক্সএমএল উপাদান, কোনও HTML নয়।
দেজি

2
আমার পুরাতন পদ্ধতিটি (যা আমি এখানে বর্ণনা করেছি) বেশ অকার্যকর ছিল এবং আমি সম্প্রতি প্রচুর কন্টেন্ট সম্পাদকদের একটি পুনরায় লেখা শুরু করেছি। যখন এই জিনিসগুলি করার কথা আসে তখন সম্ভাবনা সমস্যা হয় না; সবচেয়ে ভাল উপায় সর্বদা প্রধান উদ্বেগ। আসল উত্তরটি "পিএইচপি-তে এটি করার সহজ কোনও উপায় নেই"। কেউই বলেনি যে পিএইচপি-তে এটি করার কোনও উপায় নেই বা এটি একটি ভয়ানক ধারণা, তবে রেগেক্সের সাথে এটি অসম্ভব, যা আমি সত্যিই কখনও চেষ্টা করি নি, তবে আমার উত্তরের একটি প্রধান ত্রুটি আমি ধারণা করেছি যে প্রশ্নটি রেজেক্সকে নির্দেশ করছে? পিএইচপি প্রসঙ্গে, যে ক্ষেত্রে প্রয়োজন হয় না।
দেজি

2

আমি এটির জন্যও একটি রেজেেক্সে আমার হাত চেষ্টা করেছি। এটি বেশিরভাগই পরবর্তী এইচটিএমএল ট্যাগের সাথে জুটিযুক্ত সামগ্রীগুলির সন্ধানের জন্য দরকারী এবং এটি নিকটবর্তী ট্যাগগুলির সাথে মিল খুঁজে পাওয়া যায় না , তবে এটি নিকটবর্তী ট্যাগগুলি তুলবে। এগুলি পরীক্ষা করতে আপনার নিজের ভাষায় একটি স্ট্যাক রোল করুন।

'Sx' বিকল্পের সাহায্যে ব্যবহার করুন। আপনি যদি ভাগ্যবান বোধ করেন তবে 'জি':

(?P<content>.*?)                # Content up to next tag
(?P<markup>                     # Entire tag
  <!\[CDATA\[(?P<cdata>.+?)]]>| # <![CDATA[ ... ]]>
  <!--(?P<comment>.+?)-->|      # <!-- Comment -->
  </\s*(?P<close_tag>\w+)\s*>|  # </tag>
  <(?P<tag>\w+)                 # <tag ...
    (?P<attributes>
      (?P<attribute>\s+
# <snip>: Use this part to get the attributes out of 'attributes' group.
        (?P<attribute_name>\w+)
        (?:\s*=\s*
          (?P<attribute_value>
            [\w:/.\-]+|         # Unquoted
            (?=(?P<_v>          # Quoted
              (?P<_q>['\"]).*?(?<!\\)(?P=_q)))
            (?P=_v)
          ))?
# </snip>
      )*
    )\s*
  (?P<is_self_closing>/?)   # Self-closing indicator
  >)                        # End of tag

এটি একটি পাইথনের জন্য ডিজাইন করা হয়েছে (এটি অন্যান্য ভাষার জন্য কাজ করতে পারে, এটি চেষ্টা করে না, এটি ইতিবাচক চেহারা, নেতিবাচক লুকবিহিন্ড এবং নামযুক্ত ব্যাকরেফারেন্স ব্যবহার করে)। সমর্থন করে:

  • ট্যাগ খুলুন - <div ...>
  • ট্যাগ বন্ধ - </div>
  • মন্তব্য - <!-- ... -->
  • সিডিএটিএ - <![CDATA[ ... ]]>
  • স্ব-সমাপ্তি ট্যাগ - <div .../>
  • Ptionচ্ছিক বৈশিষ্ট্য মান - <input checked>
  • উদ্ধৃত / উদ্ধৃত বৈশিষ্ট্য মান - <div style='...'>
  • একক / ডাবল উক্তি - <div style="...">
  • অবরুদ্ধ উদ্ধৃতি - <a title='John\'s Story'>
    (এটি সত্যিই বৈধ এইচটিএমএল নয়, তবে আমি খুব ভাল লোক)
  • সমান চিহ্নগুলির চারপাশের স্পেস - <a href = '...'>
  • আকর্ষণীয় বিট জন্য ক্যাপচার নামকরণ

এটি ত্রুটিযুক্ত ট্যাগগুলিতে ট্রিগার না করার বিষয়েও বেশ ভাল, যেমন আপনি কখন ভুলে যান <বা >

যদি আপনার রেজেক্স স্বাদটি পুনরাবৃত্ত নামযুক্ত ক্যাপচারগুলিকে সমর্থন করে তবে আপনি সোনার, তবে পাইথন reতা করেন না (আমি জানি রেইজেক্স করে, তবে আমার ভ্যানিলা পাইথন ব্যবহার করা দরকার)। আপনি যা পান তা এখানে:

  • content- পরবর্তী ট্যাগ পর্যন্ত সমস্ত সামগ্রী। আপনি এটি ছেড়ে যেতে পারে।
  • markup - এটিতে সমস্ত কিছু সহ পুরো ট্যাগ।
  • comment - যদি এটি একটি মন্তব্য হয়, মন্তব্য বিষয়বস্তু।
  • cdata- এটি যদি একটি হয় <![CDATA[...]]>, সিডিএটিএ বিষয়বস্তু।
  • close_tag- যদি এটি একটি নিকট ট্যাগ ( </div>), ট্যাগ নাম।
  • tag- এটি যদি একটি খোলা ট্যাগ ( <div>) হয় তবে ট্যাগের নাম।
  • attributes- ট্যাগের মধ্যে সমস্ত বৈশিষ্ট্য। আপনি যদি বারবার গ্রুপ না পান তবে সমস্ত বৈশিষ্ট্যগুলি পেতে এটি ব্যবহার করুন।
  • attribute - পুনরাবৃত্তি, প্রতিটি বৈশিষ্ট্য।
  • attribute_name - পুনরাবৃত্তি, প্রতিটি বৈশিষ্ট্যের নাম।
  • attribute_value- পুনরাবৃত্তি, প্রতিটি বৈশিষ্ট্যের মান। এটিতে উদ্ধৃতি দেওয়া থাকলে এর মধ্যে রয়েছে।
  • is_self_closing- এটি /যদি এটি একটি স্ব-সমাপনী ট্যাগ হয়, অন্যথায় কিছুই নয়।
  • _qএবং _v- এগুলি উপেক্ষা করুন; এগুলি অভ্যন্তরীণভাবে পিছনের জন্য ব্যবহৃত হয়।

যদি আপনার রেজেক্স ইঞ্জিন বারবার নামযুক্ত ক্যাপচারগুলি সমর্থন করে না, তবে এমন একটি বিভাগ রয়েছে যা আপনি প্রতিটি বৈশিষ্ট্য পেতে ব্যবহার করতে পারেন। শুধু যে Regex চালানো attributesপ্রতিটি পেতে গ্রুপ attribute, attribute_nameএবং attribute_valueএটা আউট।

ডেমো এখানে: https://regex101.com/r/mH8jSu/11


1

এইচটিএমএল এর মতো ভাষার জন্য নিয়মিত প্রকাশগুলি যথেষ্ট শক্তিশালী নয়। অবশ্যই, এমন কয়েকটি উদাহরণ রয়েছে যেখানে আপনি নিয়মিত প্রকাশ করতে পারেন। তবে সাধারণভাবে এটি পার্সিংয়ের জন্য উপযুক্ত নয়।


0

আপনি জানি ... তোমাদের মধ্যে মানসিকতা অনেক করতে পারে না এটা করতে এবং আমি মনে করি বেড়া উভয় পক্ষের সবাই ভালমন্দ হয়। আপনি করতে পারেন এটা না, কিন্তু এটা একটু শুধু এটা বিরুদ্ধে এক Regex চলমান চেয়ে বেশি প্রক্রিয়াকরণের সময় লাগে। নিন এই একটি উদাহরণ হিসাবে (আমি এক ঘন্টার এই ভিতরে লিখেছিলেন)। এটি ধরে নেয় যে এইচটিএমএল সম্পূর্ণরূপে বৈধ, তবে আপনি পূর্বোক্ত রেজেক্স প্রয়োগ করার জন্য কোন ভাষাটি ব্যবহার করছেন তার উপর নির্ভর করে আপনি এটি সফল হবে কিনা তা নিশ্চিত করার জন্য এইচটিএমএল কিছু ফিক্সিং করতে পারেন। উদাহরণস্বরূপ, ক্লোজিং ট্যাগগুলি অপসারণ করা হবে যা সেখানে থাকার কথা নয়: </img>উদাহরণস্বরূপ। তারপরে, ক্লোজিং একক এইচটিএমএল ফরোয়ার্ড স্ল্যাশ যুক্ত করুন যেগুলি সেগুলি অনুপস্থিত রয়েছে to

আমি এটি এমন একটি লাইব্রেরি লেখার প্রসঙ্গে ব্যবহার করব যা জাভাস্ক্রিপ্টের মতো আমাকে HTML উপাদান পুনরুদ্ধার করতে সক্ষম করবে [x].getElementsByTagName()। আমি কেবলমাত্র রেইগেক্সের সংজ্ঞায়িত বিভাগে যে কার্যকারিতাটি লিখেছি সেগুলি ছড়িয়ে দিয়ে এটিকে উপাদানগুলির গাছের ভিতরে পা রাখার জন্য ব্যবহার করতাম, একবারে।

সুতরাং, এইচটিএমএল যাচাই করার জন্য এটি চূড়ান্ত 100% উত্তর হবে? না। তবে এটি একটি সূচনা এবং আরও কিছু কাজ করে, এটি করা যেতে পারে। যাইহোক, একটি রেজেক্স এক্সিকিউশন এর অভ্যন্তরে এটি করার চেষ্টা করা ব্যবহারিক নয়, দক্ষও নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.