উত্তর:
দুর্ভাগ্যক্রমে, reasonsতিহাসিক কারণে, বিভিন্ন সরঞ্জামগুলিতে কিছুটা নিয়মিত অভিব্যক্তি বাক্য গঠন থাকে এবং কখনও কখনও কিছু বাস্তবায়নের এক্সটেনশান থাকে যা অন্যান্য সরঞ্জামগুলি সমর্থন করে না। একটি সাধারণ স্থল রয়েছে, মনে হচ্ছে প্রতিটি সরঞ্জাম লেখক কিছু আলাদা পছন্দ করেছেন।
ফলাফলটি হ'ল যদি আপনার একটি নিয়মিত অভিব্যক্তি থাকে যা একটি সরঞ্জামে কাজ করে, তবে অন্য সরঞ্জামে কাজ করার জন্য আপনাকে এটিকে সংশোধন করতে হবে। সাধারণ সরঞ্জামগুলির মধ্যে প্রধান পার্থক্যগুলি হ'ল:
+?|(){}
একটি ব্যাকস্ল্যাশ প্রয়োজন কিনা ;.[]*^$
এবং সাধারণত সাধারণত কি এক্সটেনশনগুলি সমর্থন করে+?|()
এই উত্তরে আমি প্রধান মানদণ্ডগুলি তালিকাভুক্ত করি । আপনি বিশদগুলির জন্য যে সরঞ্জামগুলি ব্যবহার করছেন তার ডকুমেন্টেশন পরীক্ষা করুন।
উইকিপিডিয়ায় নিয়মিত এক্সপ্রেশন ইঞ্জিনের তুলনাতে সাধারণ প্রয়োগগুলি দ্বারা সমর্থিত বৈশিষ্ট্যগুলির তালিকাতে একটি সারণী রয়েছে।
বেসিক নিয়মিত এক্সপ্রেশনগুলি পসিক্স স্ট্যান্ডার্ড দ্বারা কোডেড হয় । এটি সিনট্যাক্স দ্বারা ব্যবহৃত grep
, sed
এবং vi
। এই বাক্য গঠনটি নিম্নলিখিত বৈশিষ্ট্যগুলি সরবরাহ করে:
^
এবং $
কেবল একটি লাইনের শুরু এবং শেষের দিকে মিলবে।.
যেকোন চরিত্রের (বা একটি নতুন লাইন বাদে কোনও চরিত্রের সাথে) মিল রয়েছে।[…]
বন্ধনী (অক্ষর সেট) এর ভিতরে তালিকাভুক্ত যে কোনও একটি অক্ষরের সাথে মেলে। খোলার ব্র্যাকেটের পরে যদি প্রথম অক্ষর a ^
হয় তবে তালিকাভুক্ত নয় এমন অক্ষরগুলি পরিবর্তে মিলেছে। একটি অন্তর্ভুক্ত করতে ]
, এটি খোলার পরে অবিলম্বে রাখুন [
(বা পরে [^
এটি নেতিবাচক সেট থাকলে)। যদি -
দুটি চরিত্রের মধ্যে থাকে তবে এটি একটি ব্যাপ্তি নির্দেশ করে; একটি আক্ষরিক অন্তর্ভুক্ত করতে -
, যেখানে এটি ব্যাপ্তি হিসাবে বিভক্ত করা যায় না সেখানে রাখুন।^$.*\[
পরবর্তী অক্ষরটির যে কোনও উদ্ধৃতি দেওয়ার আগে ব্যাকস্ল্যাশ ।*
পূর্ববর্তী অক্ষর বা সুপ এক্সপ্রেশন 0, 1 বা তার বেশি বারের সাথে মেলে।\(…\)
*
অপারেটর বা ব্যাকরেফারেন্স এবং \DIGIT
প্রতিস্থাপনের সাথে ব্যবহারের জন্য একটি সিনট্যাকটিক গ্রুপ ।\1
, \2
... যথাযথ পাঠ সংশ্লিষ্ট গ্রুপ দ্বারা মেলানো, যেমন মেলে \(fo*\)\(ba*\)\1
ম্যাচ foobaafoo
কিন্তু foobaafo
। দশম গ্রুপ এবং এর বাইরে উল্লেখ করার কোনও মানক উপায় নেই (এর মানক মানে \10
প্রথম গ্রুপটি এর পরে একটি 0
)।নিম্নলিখিত বৈশিষ্ট্যগুলি মানকও, তবে কিছু সীমাবদ্ধ বাস্তবায়ন থেকে অনুপস্থিত:
\{m,n\}
পূর্ববর্তী অক্ষর বা মধ্যবর্তী subexpression সাথে মিলে যায় মি থেকে এন বার; n বা m বাদ দেওয়া যেতে পারে এবং এর অর্থ হ'ল মি ।\{m\}
[[:alpha:]]
কোনও বর্ণের সাথে মেলে। ব্র্যাকেট এক্সপ্রেশনগুলির আধুনিক বাস্তবায়নগুলি ) এর মতো এবং সমতুল্য শ্রেণীর মতো কোলটিং উপাদানগুলি অন্তর্ভুক্ত করে ।[.ll.]
[=a=]
নিম্নলিখিতগুলি সাধারণ এক্সটেনশনগুলি (বিশেষত জিএনইউ সরঞ্জামগুলিতে) রয়েছে তবে সমস্ত প্রয়োগে সেগুলি পাওয়া যায় না। আপনি যে সরঞ্জামটি ব্যবহার করছেন তার ম্যানুয়ালটি পরীক্ষা করুন।
\|
বিকল্প জন্য: foo\|bar
ম্যাচ foo
বা bar
।\?
(সংক্ষিপ্ত জন্য \{0,1\}
) এবং \+
(সংক্ষিপ্ত জন্য \{1,\}
) পূর্ববর্তী অক্ষর বা স্যুব এক্সপ্রেসনের সাথে সর্বাধিক 1 সময়ে, বা যথাক্রমে কমপক্ষে 1 বারের সাথে মেলে।\n
একটি নতুন লাইন \t
মেলে, একটি ট্যাবের সাথে মেলে, ইত্যাদি\w
কোনও শব্দের [_[:alnum:]]
घटकের সাথে মেলে ( স্থানীয়করণের ক্ষেত্রে এটির জন্য সংক্ষিপ্তরতার সাথে সংক্ষিপ্তসার থাকলেও) এবং \W
এমন কোনও চরিত্রের সাথে মেলে যা কোনও শব্দ উপাদান নয়।\<
এবং \>
কেবলমাত্র শব্দের শুরু বা শেষে যথাক্রমে খালি স্ট্রিংটি মেলে; \b
হয় মেলে, এবং \B
মেলে যেখানে \b
না।নোট করুন অপারেটরবিহীন সরঞ্জামগুলিতে \|
নিয়মিত এক্সপ্রেশনগুলির সম্পূর্ণ ক্ষমতা নেই। ব্যাকরিফারেন্সগুলি কয়েকটি অতিরিক্ত জিনিসকে মঞ্জুরি দেয় যা গাণিতিক অর্থে নিয়মিত প্রকাশের সাথে সম্পন্ন করা যায় না।
প্রসারিত নিয়মিত এক্সপ্রেশনগুলি পসিক্স স্ট্যান্ডার্ড দ্বারা কোডিং করা হয় । BRE- র ক্ষেত্রে তাদের প্রধান সুবিধা হ'ল নিয়মিততা: সমস্ত স্ট্যান্ডার্ড অপারেটরগুলি বিরামচিহ্ন অক্ষর, বিরামচিহ্নের অক্ষর সর্বদা এটির উদ্ধৃতি দেওয়ার আগে একটি ব্যাকস্ল্যাশ। এগুলি এটিকে ব্যবহার সিনট্যাক্স হল awk
, grep -E
বা egrep
গনুহ, sed -r
এবং ব্যাশ এর=~
অপারেটর। এই বাক্য গঠনটি নিম্নলিখিত বৈশিষ্ট্যগুলি সরবরাহ করে:
^
এবং $
কেবল একটি লাইনের শুরু এবং শেষের দিকে মিলবে।.
যেকোন চরিত্রের (বা একটি নতুন লাইন বাদে কোনও চরিত্রের সাথে) মিল রয়েছে।[…]
বন্ধনী (অক্ষর সেট) এর ভিতরে তালিকাভুক্ত যে কোনও একটি অক্ষরের সাথে মেলে। প্রাথমিক ^
এবং ব্যাপ্তিগুলির সাথে পরিপূরকতা BRE- র মতো কাজ করে (উপরে দেখুন)। চরিত্রের ক্লাসগুলি ব্যবহার করা যেতে পারে তবে কয়েকটি বাস্তবায়ন থেকে অনুপস্থিত। আধুনিক প্রয়োগগুলি সমতা শ্রেণি এবং কোলটিং উপাদানগুলিকে সমর্থন করে। বন্ধনীগুলির মধ্যে একটি ব্যাকস্ল্যাশ কিছুতে পরবর্তী চরিত্রের উদ্ধৃতি দেয় তবে সমস্ত বাস্তবায়ন হয় না; \\
বহনযোগ্যতার জন্য একটি ব্যাকস্ল্যাশ বোঝাতে ব্যবহার করুন ।(…)
ব্যবহার *
বা \DIGIT
প্রতিস্থাপনের জন্য একটি সিনট্যাকটিক গ্রুপ ।|
বিকল্প জন্য: foo|bar
ম্যাচ foo
বা bar
।*
, +
এবং ?
পূর্বের চরিত্রের সাথে মিলিত হয় বা বেশ কয়েকবার স্যুপ এক্সপ্রেসনের সাথে: 0 বা আরও বেশি *
, 1 বা আরও বেশি +
, 0 বা 1 এর জন্য ?
।{m,n}
পূর্বের চরিত্রের সাথে মি বা মি এবং এন সময়ের মধ্যে স্যুপ এক্সপ্রেশন (কিছু প্রয়োগ থেকে অনুপস্থিত); n বা m বাদ দেওয়া যেতে পারে এবং এর অর্থ হ'ল মি ।{m}
\DIGIT
$0 ~ "(...)\\1"
\n
\t
\b
\B
\b
\B
পিসিআরই হ'ল ইআর এর এক্সটেনশানগুলি মূলত পার্ল দ্বারা প্রবর্তিত এবং জিএনইউ grep -P
এবং অনেকগুলি আধুনিক সরঞ্জাম এবং প্রোগ্রামিং ভাষা সাধারণত পিসিআর লাইব্রেরির মাধ্যমে গৃহীত হয় । উদাহরণ সহ সুন্দর বিন্যাসের জন্য পার্ল ডকুমেন্টেশন দেখুন । পার্লের সর্বশেষ সংস্করণটির সমস্ত বৈশিষ্ট্যগুলি পিসিআরই দ্বারা সমর্থিত নয় (যেমন পার্ল কোড এক্সিকিউশনটি কেবল পার্লে সমর্থিত)। সমর্থিত বৈশিষ্ট্যের সংক্ষিপ্তসার জন্য পিসিআরই ম্যানুয়াল দেখুন । পূর্বের মূল সংযোজনগুলি হ'ল:
(?:…)
একটি নন-ক্যাপচারিং গ্রুপ: লাইক (…)
, তবে ব্যাক-রেফারেন্সের জন্য গণনা করে না।(?=FOO)BAR
(lookahead) ম্যাচ BAR
, তবে FOO
একই অবস্থান থেকে শুরু করার জন্য যদি কোনও ম্যাচ থাকে তবেই । ম্যাচের নিম্নলিখিত পাঠ্যগুলি অন্তর্ভুক্ত না করে ম্যাচটি অ্যাঙ্কর করা সবচেয়ে কার্যকর: foo(?=bar)
ম্যাচগুলি foo
তবে তা অনুসরণ করা হয় bar
।(?!FOO)BAR
(নেতিবাচক চেহারা) ম্যাচ BAR
, কিন্তু FOO
একই পজিশনে কোনও ম্যাচও নেই । উদাহরণস্বরূপ (?!foo)[a-z]+
কোনও ছোট হাতের শব্দের সাথে মেলে যা শুরু হয় না foo
; [a-z]+(?![0-9)
কোনও সংখ্যার ছোট হাতের শব্দের সাথে মেলে যা কোনও অঙ্কের পরে হয় না (সুতরাং foo123
এটির সাথে এটি মিলছে fo
তবে মিলবে না foo
)।(?<=FOO)BAR
(lookbehind) ম্যাচগুলি BAR
তবে এটির সাথে সাথে কোনও ম্যাচ আগেই হয় FOO
। FOO
অবশ্যই একটি জ্ঞাত দৈর্ঘ্য থাকতে হবে (আপনি পুনরাবৃত্তি অপারেটরগুলি ব্যবহার করতে পারবেন না *
)। ম্যাচের পূর্ববর্তী পাঠ্যকে অন্তর্ভুক্ত না করে ম্যাচটি অ্যাঙ্কর করার জন্য এটি সবচেয়ে দরকারী: (?<=^| )foo
ম্যাচগুলি foo
কেবল তবে এটির স্থান বা স্ট্রিংয়ের শুরুতে পূর্ববর্তী হলে।(?<!FOO)BAR
(নেগেটিভ লুকবিহাইন্ড) ম্যাচ করে BAR
তবে কেবলমাত্র যদি এর সাথে ম্যাচটি তত্ক্ষণাত্ আগে না হয় FOO
। FOO
অবশ্যই একটি জ্ঞাত দৈর্ঘ্য থাকতে হবে (আপনি পুনরাবৃত্তি অপারেটরগুলি ব্যবহার করতে পারবেন না *
)। ম্যাচের পূর্ববর্তী পাঠ্য না রেখে ম্যাচটি অ্যাঙ্কর করার জন্য এটি সবচেয়ে দরকারী: (?<![a-z])foo
ম্যাচগুলি foo
তবে এটি ছোট হাতের অক্ষরের আগে না থাকলেই হয়।ইমাক্সের বাক্য গঠনটি বিআরই এবং ইআর এর মধ্যে মধ্যবর্তী হয়। ইমা্যাকস ছাড়াও, এটি -regex
জিএনইউ অনুসন্ধানে ডিফল্ট সিনট্যাক্স । ইমাকস নিম্নলিখিত অপারেটরদের প্রস্তাব:
^
, $
, .
, […]
, *
, +
, ?
Ere হিসেবে\(…\)
, \|
, \{…\}
, BrE তে যেমন\DIGIT
\<
এবং \>
শব্দ সীমা জন্য; এবং আরও অনেকগুলি ইমা্যাক্সের সাম্প্রতিক সংস্করণগুলিতে, যা প্রায়শই অন্যান্য ইঞ্জিনগুলিতে ইমাক্স-এর মতো সিনট্যাক্স সহ সমর্থিত হয় না।শেল গ্লোবস (ওয়াইল্ডকার্ডস) নিয়মিত প্রকাশের চেয়ে সম্পূর্ণ আলাদা এবং কম শক্তিশালী এমন একটি সিনট্যাক্সের সাথে প্যাটার্ন মেলানো সম্পাদন করে। শেলগুলি ছাড়াও, এই ওয়াইল্ডকার্ডগুলি অন্যান্য সরঞ্জাম যেমন find -name
আরএসসিএনসি ফিল্টারগুলির সাথে উপলব্ধ। পসিক্স নিদর্শনগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে:
?
কোনও একক চরিত্রের সাথে মেলে।[…]
সাধারণ নিয়মিত অভিব্যক্তি সিনট্যাক্সের মতো একটি চরিত্র সেট। কিছু শেল অক্ষর শ্রেণীর জন্য সমর্থন করে না। কিছু শেল সেট উপেক্ষা করার !
পরিবর্তে প্রয়োজন ^
।*
অক্ষরের যে কোনও অনুক্রমের সাথে মেলে (প্রায়শই /
ফাইল পাথের সাথে মিলের সময় ব্যতীত ; যদি /
এ থেকে বাদ দেওয়া হয় *
তবে **
মাঝে মাঝে অন্তর্ভুক্ত থাকে /
তবে সরঞ্জামটির ডকুমেন্টেশন পরীক্ষা করুন)।Ksh অতিরিক্ত বৈশিষ্ট্যগুলি সরবরাহ করে যা নিয়মিত এক্সপ্রেশনগুলির সম্পূর্ণ শক্তির সাথে এর প্যাটার্নটি মেলে। এই বৈশিষ্ট্যগুলি দৌড়ানোর পরে ব্যাশে পাওয়া যায় shopt -s extglob
। Zsh এর আলাদা সিনট্যাক্স রয়েছে তবে ksh এর সিনট্যাক্স পরে সমর্থন করতে পারে setopt ksh_glob
।
grep
, tw
, expr
...)। বাদে ksh
, এই টুলসেটটি খুব কমই যদিও এটিএন্ডটিটির বাইরে পাওয়া যায়।
regex(7)
আপনার সাথে একমত হয় এবং [these]
"ব্র্যাকেট এক্সপ্রেশন" এবং ("বন্ধনী" এর ভিতরে ") [:these:]
" চরিত্রের শ্রেণিগুলিকে কল করে। " আমি কীভাবে সুনির্দিষ্টভাবে সম্বোধন করব তা নিশ্চিত নই।
-
একটি ব্যাপ্তি নির্দিষ্ট করে এবং তা পালাতে হবে, প্রথমে (afterচ্ছিকের পরে ^
), বা এটি আক্ষরিকভাবে গ্রহণ করতে গেলে শেষ অবধি। (আমি প্রচুর বাগ দেখতে পেয়েছি যেমন, উদাহরণস্বরূপ – [A-z]
নোটের পরিবর্তনের লক্ষ্যে from যা কোডের বর্ণগুলি 65 থেকে 122 এর সাথে মেলে এবং ঘটনাক্রমে প্রতিটিটি অন্তর্ভুক্ত করে: [\]^_`
আমি [!-~]
এএনএসআই-তে সমস্ত মুদ্রণযোগ্য অক্ষরগুলির সাথে মিলিয়ে বৈধ এখনও বিভ্রান্ত দেখতে পেয়েছি I've , যা আমি দেখতে পছন্দ করি [\x21-\x7e]
, যা ভিন্ন ভিন্ন মাত্রায় বিভ্রান্ত হওয়া সত্ত্বেও তার ক্রিয়ায় অন্তত সোজা
vim
হ'ল এটি এবং এটি অ্যান্ড টি লাইবাস্ট (যেমন রয়েছেksh93
)।