একচেটিয়া পাঠ্য রেজেক্স মাল্টিলাইন ট্যাগগুলি সনাক্ত করছে না


129

আমার এখানে এই রেজেক্স আছে;

\[sometag\](.*)\[/sometag\]

যা [sometag]ট্যাগ দ্বারা বেষ্টিত পাঠ্য ধরা হয় । এটি স্ট্রিংয়ের মতো এই ট্যাগগুলিতে থাকা একক লাইন তথ্যের জন্য কাজ করে [sometag]this is a bit of text[/sometag]। তবে এটি এমন একাধিক লাইনের বিস্তৃত পাঠ্যে কাজ করে না;

[sometag] here is more text

it spans more than one line [/sometag]

কোনও কারণে, সাব্লাইম পাঠ্যের রেজেক্স সন্ধানকারী একাধিক লাইন জুড়ে ট্যাগগুলিকে স্বীকৃতি দেবে না। আমি জানতে চাই যে এটি সাব্লাইম টেক্সট, একটি টগলযোগ্য বিকল্প বা রেজেক্সগুলির সাথে কেবল আমার ব্যক্তিগত অক্ষমতা নিয়ে সমস্যা।

উত্তর:


239

শুরুতে, (?s)নতুন লাইনের অক্ষরগুলির সাথে মিলে ডট তৈরি করতে একটি ডটল সংশোধক ব্যবহার করুন ।

(?s)\[sometag\](.*?)\[\/sometag\]

ডেমো


ধন্যবাদ! আমাকে কেন এই অতিরিক্ত প্রশ্ন চিহ্নগুলি অন্তর্ভুক্ত করতে হবে?
মাউরদেখে

8
?পরে *একটি লোভী ম্যাচ করবে। [b]foo[/b]foo[b]bar[/b]উদাহরণ হিসাবে বিবেচনা করুন । \[b\].*\[\/b\]গোটা শেষের সাথে শেষের খ থেকে পুরোটা মিলবে খ।
অবিনাশ রাজ


11
(? গুলি) ডট এছাড়াও নতুন লাইন অন্তর্ভুক্ত করে
তোলে

3
তারকাচিহ্নের পরে প্রশ্ন চিহ্নটি গুরুত্বপূর্ণ কারণ এটি ম্যাচটিকে অ-লোভী হিসাবে সংজ্ঞায়িত করে।
andrej

12

যদি কোনও কারণে ডটের মোডে পরিবর্তনটি অগ্রহণযোগ্য হয় তবে আপনি এটি নিতে পারেন:

[sometag](.|\n)+?[/sometag]

3
আপনার (.|\n)+?যদি ডটল সংশোধকটিতে অ্যাক্সেস থাকে তবে কখনও ব্যবহার করবেন না। আপনি যদি (?s)কিছু ফলভেয়ার ব্যবহার না করতে পারেন তবে [\s\S]/ [\d\D]/ ব্যবহার করুন [\w\W]তবে বিকল্প প্রস্তাবক এখানে প্রস্তাবিত নয়। এই প্যাটার্নটি অত্যন্ত অদক্ষ এবং সহজেই একটি টাইমআউট সমস্যার সমাধান করতে পারে।
উইক্টর স্ট্রিবিউ

1
@ উইক্টরস্ট্রিবিউউইউ: আপনি এটি ব্যাখ্যা করতে পারবেন কেন এটি অদক্ষ? আমি সবসময় ব্যবহার করি [\s\S], তবে এক নজরে (.|\n)সমান বলে মনে হয়? এটি কি মিলে যাওয়া গ্রুপগুলির সাথে করা? কিন্তু তাহলে (?:.|\n)কি একই হবে?
সার্বেরাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.