2 টি ট্যাগের মধ্যে সমস্ত পাঠ্য বাছাই করার সর্বোত্তম উপায় কী - উদাহরণস্বরূপ: পৃষ্ঠায় থাকা সমস্ত 'প্রাক' ট্যাগের মধ্যে পাঠ্য।
/<div>.*?<\/div>/.exec("<div><div></div></div>")
2 টি ট্যাগের মধ্যে সমস্ত পাঠ্য বাছাই করার সর্বোত্তম উপায় কী - উদাহরণস্বরূপ: পৃষ্ঠায় থাকা সমস্ত 'প্রাক' ট্যাগের মধ্যে পাঠ্য।
/<div>.*?<\/div>/.exec("<div><div></div></div>")
উত্তর:
আপনি ব্যবহার করতে পারেন "<pre>(.*?)</pre>"
(যা কিছু পাঠ্য চান তার সাথে পূর্বের পরিবর্তে) এবং প্রথম গোষ্ঠীটি বের করুন (আরও নির্দিষ্ট নির্দেশাবলীর জন্য একটি ভাষা নির্দিষ্ট করুন) তবে এটি আপনার সহজ এবং বৈধ এইচটিএমএল রয়েছে এমন সরল ধারণাটি ধরে নিয়েছে।
অন্যান্য মন্তব্যকারীরা যেমন পরামর্শ দিয়েছেন, আপনি যদি কিছু জটিল করছেন তবে একটি HTML পার্সার ব্যবহার করুন।
<pre>
চেষ্টা করার পরেও যদি আপনি ট্যাগগুলি দেখেন তবে <pre>(.*?)<\/pre>
এটি (because *?) ক্যাপচার গোষ্ঠীর পরিবর্তে পুরো ম্যাচটি কী কী ক্যাপচার করেছে তা আপনি দেখতে পাচ্ছেন। উদাসীন মনে হলেও আমি সর্বদা "বন্ধনী = চোরের জুড়ি" মনে করি কারণ যতক্ষণ না এই (
হিসাবে অনুসরণ ?
করা হয় (?:
বা না হয় (?>
, প্রতিটি ম্যাচে দুটি ক্যাপচার থাকবে: পুরো ম্যাচের জন্য 1 এবং ক্যাপচার গ্রুপের জন্য 1। প্রতিটি প্রথম বন্ধনীর সেট অতিরিক্ত ক্যাপচার যুক্ত করে। আপনি যে ভাষাতে কাজ করছেন তাতে উভয় ক্যাপচার কীভাবে পুনরুদ্ধার করবেন তা আপনাকে কেবল জানতে হবে।
ট্যাগটি অন্য লাইনে শেষ করা যেতে পারে। এ কারণেই \n
যুক্ত করা দরকার।
<PRE>(.|\n)*?<\/PRE>
(.|\n)*?
একাধিক লাইন জুড়ে এইচটিএমএল ট্যাগ নিয়ে কাজ করার সময় যোগ করার বিষয়ে গুরুত্বপূর্ণ বিষয় । এইচটিএমএল ট্যাগগুলি একই লাইনে থাকলে কেবলমাত্র নির্বাচিত উত্তর কাজ করে।
(.|\n)*?
কোনও চরের সাথে মেলে কখনও ব্যবহার করবেন না । সর্বদা (একক লাইন) সংশোধক .
সহ ব্যবহার করুন s
। বা একটি [\s\S]*?
workaround।
/\*(.|\n)*?\*/
কাজটি নিয়ে এসেছি - ধন্যবাদ
(?<=(<pre>))(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~]| )+?(?=(</pre>))
মূলত এটি যা করে তা হ'ল:
(?<=(<pre>))
<pre>
ট্যাগটি সহ বাছাই করতে হবে end
(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|~]| )
এটি কেবল একটি নিয়মিত প্রকাশ যা আমি প্রয়োগ করতে চাই। এই ক্ষেত্রে, এটি অক্ষর বা অঙ্ক বা নিউলাইন চরিত্র বা বর্গবন্ধ বন্ধনীর উদাহরণে তালিকাভুক্ত কিছু বিশেষ অক্ষর নির্বাচন করে। পাইপের চরিত্রটির |
সহজ অর্থ " OR "।
+?
প্লাস চরিত্রটি উপরের এক বা একাধিকটি নির্বাচন করতে বলে - অর্ডারটি কোনও ব্যাপার নয়। প্রশ্ন চিহ্ন ডিফল্ট আচরণকে 'লোভী' থেকে 'উর্দ্ধে' পরিবর্তন করে।
(?=(</pre>))
</pre>
ট্যাগটি দিয়ে বাছাই করতে হবে
আপনার ব্যবহারের ক্ষেত্রে উপর নির্ভর করে আপনাকে কিছু সংশোধক ( আই বা এম ) যুক্ত করতে হতে পারে
এখানে আমি এই অনুসন্ধানটি সাব্লাইম পাঠ্যে সম্পাদন করেছি যাতে আমার রেগেজেমে কোনও সংশোধক ব্যবহার করতে হবে না।
উপরের উদাহরণটি পিএইচপি, পার্ল, জাভা ইত্যাদির মতো ভাষাগুলির সাথে সূক্ষ্মভাবে কাজ করা উচিত ... জাভাস্ক্রিপ্ট যদিও চেহারাটির পিছনে সমর্থন করে না তাই আমাদের ব্যবহারের কথা ভুলে যেতে হবে (?<=(<pre>))
এবং একরকম কাজ করার সন্ধান করতে হবে। ট্যাগগুলির মধ্যে এখানে রেজেজেক্স ম্যাচ পাঠানোর মতো প্রতিটি নির্বাচনের জন্য আমাদের ফলাফল থেকে প্রথম চারটি অক্ষরটি সহজ
সরান
নন-ক্যাপচারিং বন্ধনীগুলির জন্য জাভাস্ক্রিপ্ট রেগেক্স ডকুমেন্টেশনও দেখুন
উপাদানগুলির মধ্যে সামগ্রী পেতে নীচের প্যাটার্নটি ব্যবহার করুন। [tag]
আপনি যে সামগ্রীটি থেকে বের করতে চান সেই প্রকৃত উপাদানটি দিয়ে প্রতিস্থাপন করুন ।
<[tag]>(.+?)</[tag]>
কিছু সময় ট্যাগগুলিতে anchor
ট্যাগ থাকার মতো বৈশিষ্ট্য থাকবে href
, তারপরে নীচের প্যাটার্নটি ব্যবহার করুন।
<[tag][^>]*>(.+?)</[tag]>
<[tag]>
মিলবে <t>
, <a>
এবং<g>
Replace [tag] with the actual element you wish to extract the content from
অংশটি মিস করেছেন ।
[]
পুরোপুরি বাদ দেওয়া উচিত ছিল। এটি আরও স্পষ্ট হবে, RegEx এর অর্থ এবং এই কারণে যে, লোকেরা প্রথমে কোডটি স্ক্যান করে এবং পরে পাঠ্যটি পড়ে;)
সীমাবদ্ধ ট্যাগগুলি বাদ দিতে:
(?<=<pre>)(.*?)(?=</pre>)
(?<=<pre>)
পরে পাঠ্য সন্ধান করুন <pre>
(?=</pre>)
আগে পাঠ্যের সন্ধান করে </pre>
ফলাফল ভিতরে পাঠ্য হবে pre
ট্যাগ
আপনার এইচটিএমএলকে রেজিক্সগুলির বিশ্লেষণ করার চেষ্টা করা উচিত নয় এবং এই প্রশ্নটি কীভাবে পরিণত হয়েছিল তা দেখুন।
সহজ কথায়, এইচটিএমএল কোনও নিয়মিত ভাষা নয় তাই আপনি নিয়মিত প্রকাশের সাথে পুরোপুরি বিশ্লেষণ করতে পারবেন না।
এমন কথা বলার পরে যে যখন কোনও নেস্টেড নেস্টেড নেই তখন আপনি এইচটিএমএল এর সাবটাইটগুলি পার্স করতে পারেন। এতক্ষণ যে কোনও কিছু নিজেই যে ট্যাগের মধ্যে না থাকে এবং না হয়, এটি কাজ করবে:
preg_match("/<([\w]+)[^>]*>(.*?)<\/\1>/", $subject, $matches);
$matches = array ( [0] => full matched string [1] => tag name [2] => tag content )
আরও ভাল ধারণাটি হল আপনার এইচটিএমএল লোড করার জন্য নেটিভ ডোমডকুমেন্টের মতো পার্সার ব্যবহার করা, তারপরে আপনার ট্যাগটি নির্বাচন করুন এবং অভ্যন্তরীণ এইচটিএমএল পাবেন যা দেখতে এরকম কিছু দেখতে পাবে:
$obj = new DOMDocument();
$obj -> load($html);
$obj -> getElementByTagName('el');
$value = $obj -> nodeValue();
এবং যেহেতু এটি যথাযথ পার্সার তাই এটি নেস্টিং ট্যাগ ইত্যাদি পরিচালনা করতে সক্ষম হবে
php
। পিএইচপি কীভাবে ছবিতে এসেছিল তা নিশ্চিত নয় ...
এটা চেষ্টা কর....
(?<=\<any_tag\>)(\s*.*\s*)(?=\<\/any_tag\>)
এই উত্তরটি আশেপাশের দেখার জন্য সমর্থনটি মনে করে! এটি আমাকে ট্যাগ খোলা এবং বন্ধের জোড়ার মধ্যে সমস্ত পাঠ্য সনাক্ত করতে দেয় identify এটি '>' এবং '<' এর মধ্যে সমস্ত পাঠ্য। এটি কাজ করে কারণ চারপাশে দেখা চরিত্রগুলির সাথে মেলে না।
(? <=>) ([\ W \ গুলি] + +) (? = </)
আমি এটি এইচটিএমএল খণ্ডটি ব্যবহার করে https://regex101.com/ এ পরীক্ষা করেছি ।
<table>
<tr><td>Cell 1</td><td>Cell 2</td><td>Cell 3</td></tr>
<tr><td>Cell 4</td><td>Cell 5</td><td>Cell 6</td></tr>
</table>
এটি তিনটি অংশের একটি খেলা: পিছনের চেহারা, সামগ্রী এবং সামনের দিকে চেহারা।
(?<=>) # look behind (but don't consume/capture) for a '>'
([\w\s]+) # capture/consume any combination of alpha/numeric/whitespace
(?=<\/) # look ahead (but don't consume/capture) for a '</'
আমি আশা করি এটি 10 এর জন্য শুরু হিসাবে কাজ করবে। ভাগ্য।
var str = "Lorem ipsum <pre>text 1</pre> Lorem ipsum <pre>text 2</pre>";
str.replace(/<pre>(.*?)<\/pre>/g, function(match, g1) { console.log(g1); });
যেহেতু গৃহীত উত্তর জাভাস্ক্রিপ্ট কোড ছাড়াই, তাই যুক্ত করুন:
preg_match_all(/<pre>([^>]*?)<\/pre>/,$content,$matches)
এই regex ট্যাগ মধ্যে alling নির্বাচন করবে। এটি কোনও নতুন লাইনে নয় (মাল্টলাইন দিয়ে কাজ করুন)।
পাইথনে, DOTALL
পতাকাটি সেট করা নিউলাইনগুলি সহ সমস্ত কিছু ক্যাপচার করবে।
যদি ডটল পতাকাটি নির্দিষ্ট করা থাকে তবে এটি একটি নতুন লাইন সহ যে কোনও অক্ষরের সাথে মেলে। docs.python.org
#example.py using Python 3.7.4
import re
str="""Everything is awesome! <pre>Hello,
World!
</pre>
"""
# Normally (.*) will not capture newlines, but here re.DOTATLL is set
pattern = re.compile(r"<pre>(.*)</pre>",re.DOTALL)
matches = pattern.search(str)
print(matches.group(1))
python example.py
Hello,
World!
কোনও দস্তাবেজে সমস্ত খোলার এবং সমাপনী ট্যাগগুলির মধ্যে পাঠ্য ক্যাপচার করার জন্য, finditer
দরকারী। নীচের উদাহরণে, তিনটি খোলার এবং সমাপনী <pre>
ট্যাগ স্ট্রিংয়ে উপস্থিত রয়েছে।
#example2.py using Python 3.7.4
import re
# str contains three <pre>...</pre> tags
str = """In two different ex-
periments, the authors had subjects chat and solve the <pre>Desert Survival Problem</pre> with a
humorous or non-humorous computer. In both experiments the computer made pre-
programmed comments, but in study 1 subjects were led to believe they were interact-
ing with another person. In the <pre>humor conditions</pre> subjects received a number of funny
comments, for instance: “The mirror is probably too small to be used as a signaling
device to alert rescue teams to your location. Rank it lower. (On the other hand, it
offers <pre>endless opportunity for self-reflection</pre>)”."""
# Normally (.*) will not capture newlines, but here re.DOTATLL is set
# The question mark in (.*?) indicates non greedy matching.
pattern = re.compile(r"<pre>(.*?)</pre>",re.DOTALL)
matches = pattern.finditer(str)
for i,match in enumerate(matches):
print(f"tag {i}: ",match.group(1))
python example2.py
tag 0: Desert Survival Problem
tag 1: humor conditions
tag 2: endless opportunity for self-reflection
তুমি ব্যবহার করতে পার Pattern pattern = Pattern.compile( "[^<'tagname'/>]" );
<pre>([\r\n\s]*(?!<\w+.*[\/]*>).*[\r\n\s]*|\s*[\r\n\s]*)<code\s+(?:class="(\w+|\w+\s*.+)")>(((?!<\/code>)[\s\S])*)<\/code>[\r\n\s]*((?!<\w+.*[\/]*>).*|\s*)[\r\n\s]*<\/pre>