সংক্ষেপে, না। ভিমের রেইজেক্স একটি অনন্য স্বাদ এবং এটিকে অন্য স্বাদের মতো আচরণ করার কোনও বিকল্প নেই।
আমি মনে করি এটি একটি ভাল জিনিস।
জাদু
'magic'
বিকল্প Regex গন্ধ পরিবর্তন করে না যে তেজ ব্যবহার করে। এটি কেবলমাত্র অনেকগুলি \
অবিচ্ছিন্ন পরমাণুর আচরণকে উল্টে দেয়।
উদাহরণস্বরূপ, ডিফল্টরূপে, +
একটি আক্ষরিক +
চরিত্র, \+
যার অর্থ "পূর্ববর্তী পরমাণুর এক বা একাধিক"। বিপরীতে, এর *
অর্থ "পূর্ববর্তী পরমাণুর শূন্য বা আরও বেশি", যদিও \*
এটি আক্ষরিক *
। অনেকে এটিকে বেশ বিভ্রান্ত মনে করেন। \v
আপনার ধাঁচে ব্যবহার করা এটিকে আরও সামঞ্জস্যপূর্ণ করে তোলে। :help 'magic'
একটি ভাল সংক্ষিপ্তসার দেয়:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
ব্যক্তিগতভাবে, আমি মনে করি ডিফল্ট আচরণ কোড ফাইলগুলির জন্য দুর্দান্ত, যেখানে foo(
আক্ষরিক ব্যবহারের মতো জিনিসগুলি অনুসন্ধান করা অস্বাভাবিক নয় (
।
ভিমের নিজস্ব রেইগেক্স গন্ধ
আমি অনেক লোক প্রত্যক্ষ করেছি যে ভিম সমর্থিত পিসিআরই ইচ্ছুক। ব্যক্তিগতভাবে, আমি চাই অন্য সরঞ্জামগুলি রেগেক্সের ভিমের স্বাদকে সমর্থন করে। এর কিছু ক্ষমতা রয়েছে যা পিসিআরইতে অর্জন অসম্ভব বা খুব জটিল।
পিসিআরই তে অসম্ভব
লুকোয়ারাউন্ড হ'ল একটি সাধারণ বৈশিষ্ট্য যেখানে আপনি দৃ .়তার সাথে বলতে পারেন যে কোনও প্যাটার্নটি আপনি মেটাতে চেষ্টা করছেন সেই প্যাটার্নটির আগে বা পরে মেলে না বা মিলবে না। উদাহরণস্বরূপ, পিসিআরই প্যাটার্ন q(?!u)
(বা ভিম রেজেক্স প্যাটার্ন qu\@!
) এর সাথে মেলে যা ক q
এর পরে নেই u
। (এটি এর চেয়ে আরও সঠিক q[^u]
, যার প্রয়োজনে এর পরে কিছু চরিত্র রয়েছে q
))
চলক দৈর্ঘ্যের নেতিবাচক চেহারা পিছনে
পিসিআরই এবং আরও অনেক স্বাদে একটি সীমাবদ্ধতা রয়েছে যে নেতিবাচক লুকবিহীন প্যাটার্নটি অবশ্যই একটি নির্দিষ্ট দৈর্ঘ্যের হওয়া উচিত। এর অর্থ এই যে একটি প্যাটার্নটির (?<![a-z]{3})foo
অর্থ, "স্ট্রিংটি ঠিক 3 ছোট হাতের অক্ষরের foo
আগে নয় ") ভাল, তবে (?<![a-z]+)foo
(যার অর্থ "স্ট্রিংটি কোনও সংখ্যার ছোট হাতের অক্ষরের foo
আগে নয় ") হয় না।
এই সীমাবদ্ধতা ভিমে বিদ্যমান নেই। ভিমে, যেমনটি দেখতে \([a-z]\+\)\@<!foo
কিছুটা কুৎসিত হওয়ার মতো একটি প্যাটার্নটি পুরোপুরি বৈধ।
ভিম রিজেজেসে সহজ
ভিগের রিজেজের স্বাদে কিছু জিনিস অনেক ভাল।
ম্যাচ অ্যাঙ্গারগুলির শুরু এবং শেষ
আমার মতে সর্বাধিক উল্লেখযোগ্য হ'ল \zs
এবং \ze
অ্যাঙ্করগুলি। এগুলি আপনাকে ম্যাচের শুরু এবং শেষ নির্দিষ্ট করতে দেয়। উদাহরণস্বরূপ, কোনও ফাংশন কলের মধ্যে এবং foo(\zs.*\ze)
এর মধ্যে যা রয়েছে কেবল তার সাথে মেলে । এটি পিসিআরইতে করা যেতে পারে তবে এটির চেহারাটি ব্যবহার দরকার যা কিছুটা ক্লান্তিকর:(
)
foo(...)
(?<=foo\().*(?=\))
উপসর্গ মিলছে
ভীম যে আরও দুর্দান্ত জিনিস করতে পারে তা হ'ল অক্ষরের একটি নির্দিষ্ট ক্রমের কোনও উপসর্গ (খালি উপসর্গ সহ) সাথে মেলে। উদাহরণস্বরূপ, উপর মেলে f
, fo
, foo
, অথবা food
, প্যাটার্ন f\%[ood]
ব্যবহার করা যাবে। পিসিআরই-তে, এমন একটি প্যাটার্ন দেখতে ভাল লাগবে f(o(od?)?)?
। (কল্পনা করুন যে দীর্ঘ স্ট্রিংয়ের জন্য!)
কার্সার, লাইন এবং কলামের অবস্থানের সাথে মিলছে
বাফারে ম্যাচিং পজিশনের জন্য ভিমের রেজেক্সে কিছু অ্যাঙ্কর রয়েছে।
\%23c
23 টি কলামের সাথে মেলে
\%<23c
23 কলামের আগে মেলে
\%>23c
23 কলামের পরে মেলে
\%16l
ম্যাচ লাইন 16
- কলামের মতো, লাইন নম্বরের আগে বা পরে অ্যাঙ্কার রয়েছে
\%#
কার্সারের অবস্থানের সাথে মেলে
আমি মনে করি রেগেক্সের ভিমের স্বাদকে আলিঙ্গন করা সার্থক। এটি মূলত প্রোগ্রামিংয়ের জন্য ব্যবহৃত একটি পাঠ্য সম্পাদককে ব্যবহারের জন্য উপযুক্ত এবং এটি বেশ শক্তিশালী।
\v
অন্তর্ভুক্ত রয়েছে<>
, যা আফাইক ভিমের কাছে অনন্য। সুতরাং না, কেবল তাদের "Vim regex" হিসাবে বর্ণনা করুন। (উত্তর হিসাবে পোস্ট করা হচ্ছে না কারণ আমি ইতিবাচক নই)