ভিমের রেজেক্স ম্যাজিকস কি সুপরিচিত রেজেক্স ক্লাসগুলির সাথে সামঞ্জস্যপূর্ণ?


16

অনেক ইউনিক্স সরঞ্জামের নিয়মিত প্রকাশের বাক্য গঠনগুলি প্রায়শই পসিক্স-কোডিফড বেসিক এবং বর্ধিত নিয়মিত এক্সপ্রেশন (যথাক্রমে বিআরই এবং ইআরই) হয় এবং কিছু আধুনিক বাস্তবায়নে পার্ল স্টাইল (পিসিআরই এটির বাস্তবায়ন হয়ে থাকে)।

ভিমের ম্যাজিকের স্তরগুলির এবং এই জাতীয় বাহ্যিকভাবে সংজ্ঞায়িত, তবে সুপরিচিত, শ্রেণীর মধ্যে কী একের সাথে যোগাযোগ রয়েছে? দেখে মনে হচ্ছে \mএটি BRE এবং \vERE, POSIX ব্যতীত বর্ণমালার অন্তর্ভুক্ত নয়।

যদি এই জাতীয় কোনও চিঠিপত্রের উপস্থিতি থাকে তবে এটি কোথাও সংজ্ঞায়িত হয়? pattern.txtশুধুমাত্র একটি উল্লেখ আছে POSIX

বা ভিম নিয়মিত অভিব্যক্তি বর্ণনা করতে আমাদের কি "যাদু" দিয়ে আটকে থাকতে হবে?


3
খুব নিশ্চিত শব্দের সীমানা \vঅন্তর্ভুক্ত রয়েছে <>, যা আফাইক ভিমের কাছে অনন্য। সুতরাং না, কেবল তাদের "Vim regex" হিসাবে বর্ণনা করুন। (উত্তর হিসাবে পোস্ট করা হচ্ছে না কারণ আমি ইতিবাচক নই)
ডোরকনব ২

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

উত্তর:


22

সংক্ষেপে, না। ভিমের রেইজেক্স একটি অনন্য স্বাদ এবং এটিকে অন্য স্বাদের মতো আচরণ করার কোনও বিকল্প নেই।

আমি মনে করি এটি একটি ভাল জিনিস।

জাদু

'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?)?)?। (কল্পনা করুন যে দীর্ঘ স্ট্রিংয়ের জন্য!)

কার্সার, লাইন এবং কলামের অবস্থানের সাথে মিলছে

বাফারে ম্যাচিং পজিশনের জন্য ভিমের রেজেক্সে কিছু অ্যাঙ্কর রয়েছে।


আমি মনে করি রেগেক্সের ভিমের স্বাদকে আলিঙ্গন করা সার্থক। এটি মূলত প্রোগ্রামিংয়ের জন্য ব্যবহৃত একটি পাঠ্য সম্পাদককে ব্যবহারের জন্য উপযুক্ত এবং এটি বেশ শক্তিশালী।

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