পার্থক্য '.' , '?' এবং নিয়মিত প্রকাশে '*'?


21

এই তিনটি উপাদানকে (কী এগুলিকে মেটাচার্যাকার বলা হয়?) কীভাবে পার্থক্য রয়েছে তার একটি উদাহরণ আমি পেতে পারি?

আমি জানি যে এর *অর্থ সমস্ত বা কিছুই নয় তবে আমি নিশ্চিত নই যে এটি সম্পর্কে সঠিকভাবে চিন্তা করার উপায় not অন্যদিকে .এবং ?একই মনে হয়। তারা একটি চরিত্রের সাথে মেলে, তাই না?



উত্তর:


16

সোজা উইকিপিডিয়া থেকে নেওয়া :

? প্রশ্ন চিহ্নটি পূর্ববর্তী উপাদানের শূন্য বা এক ঘটনাকে নির্দেশ করে। উদাহরণস্বরূপ, colou? R "রঙ" এবং "রঙ" উভয়ের সাথেই মিলছে।

*নক্ষত্রটি পূর্ববর্তী উপাদানটির শূন্য বা তার বেশি সংকেতকে নির্দেশ করে। উদাহরণস্বরূপ, আব * সি "এসি", "এবিসি", "এবিবিসি", "অ্যাবিবিসি" ইত্যাদি মিলছে matches

বড় পার্থক্য হ'ল নক্ষত্রটি শূন্য বা ততোধিক ঘটনার সাথে মেলে, যখন প্রশ্ন চিহ্নটি শূন্য বা এক ঘটনার সাথে মেলে । এই দুটি উদাহরণের তুলনা করুন:

$ printf "colour\ncolor\ncolouur\n" | egrep 'colou?r'                          
colour
color
$ printf "colour\ncolor\ncolouur\n" | egrep 'colou*r'                          
colour
color
colouur

কারণ আপনি colouurচিঠিতে (বাছাইয়ের আগে পূর্ববর্তী উপাদান ?) একাধিকবার এসেছিল, এটির সাথে এটি মিলছে না ?, তবে এটির সাথে মিলছে*

অনুরূপ উদাহরণ:

$ printf "error\neror\ner\n" | egrep 'er?or'                                   
eror
$ printf "error\neror\ner\n" | egrep 'er*or'                                   
error
eror

একই উইকিপিডিয়া পৃষ্ঠা থেকে:

যে কোনও একক চরিত্রের সাথে মেলে (অনেকগুলি অ্যাপ্লিকেশন নিউলাইনগুলি বাদ দেয় এবং ঠিক কোন অক্ষরগুলিকে নিউলাইনগুলি বিবেচনা করা হয় তা হ'ল স্বাদ-, অক্ষর-এনকোডিং- এবং প্ল্যাটফর্ম-নির্দিষ্ট, তবে লাইন ফিডের অক্ষরটি অন্তর্ভুক্ত রয়েছে তা ধরে নেওয়া নিরাপদ)। POSIX বন্ধনী এক্সপ্রেশন মধ্যে, ডট অক্ষর একটি আক্ষরিক বিন্দুর সাথে মেলে। উদাহরণস্বরূপ, এসি "অ্যাবসি" ইত্যাদির সাথে মেলে, তবে [এসি] কেবল "ক", "।", "সি" এর সাথে মেলে।

আমাদের উদাহরণে,

$ printf "colour\ncolor\ncolouur\n" | egrep 'colo.r'                           
colour
$ printf "colour\ncolor\ncolouur\n" | egrep 'colou.r'                          
colouur

যথাযথভাবে যথেষ্ট, শেষটি পড়ছে match any line that has "colou", plus any character, plus letter "r"

উপসংহার

আপনি জিজ্ঞাসা করেছেন: "আমি জানি যে '*' এর অর্থ সমস্ত বা কিছুই না, তবে এটি সম্পর্কে সঠিকভাবে চিন্তা করার সঠিক উপায় কিনা তা আমি নিশ্চিত নই। অন্যদিকে '' & '?' একই মনে হচ্ছে। " আপনি দেখতে পাচ্ছেন যে, বিন্দু এবং নক্ষত্রটি একরকম নয়। বিন্দুটি এমন কোনও চরিত্রের উপর পরিচালনা করে যা সেই নির্দিষ্ট অবস্থানটি দখল করে থাকতে পারে, যখন প্রশ্ন চিহ্নটি পূর্ববর্তী উপাদানটিতে কাজ করে।


32

আপনি শেল গ্লোবগুলির সাথে নিয়মিত ভাবগুলি গুলিয়ে ফেলছেন

রেগুলার এক্সপ্রেশন সিনট্যাক্স ইন ., কোনো একক অক্ষর (সাধারণত newline অক্ষর বাদে) প্রতিনিধিত্ব করে যখন *একটি হল কোয়ান্টিফায়ার পূর্ববর্তী Regex পরমাণু (চরিত্র বা গোষ্ঠী) আরো শূন্য বা অর্থ। ?শূন্য বা পূর্ববর্তী পরমাণুর এক উদাহরণ, বা (এটি সমর্থনকারী রেজেক্স রূপগুলিতে) একটি সংশোধক যা অ-লোভীকে কোয়ান্টিফায়ার আচরণ সেট করে is

শেল গ্লোবগুলিতে, ?একটি একক অক্ষরকে উপস্থাপন করে (রেগেক্সের মতো .) *আবার শূন্য বা আরও বেশি অক্ষরের ক্রম উপস্থাপন করে (রেজেজের সমতুল্য .*)।

আপনি যে সহায়কগুলি খুঁজে পেতে পারেন সেগুলির কয়েকটি হ'ল http://www.regular-expressions.info/quickstart.html এবং http://mywiki.wooledge.org/glob


6

দ্রষ্টব্য: Examples provided are in Python.ধারণাটি একই রয়ে গেছে।

'.'একটি মিলের প্রতীক যা নিউলাইন চরিত্র ব্যতীত অন্য কোনও চরিত্রের সাথে মেলে (এটিও re.DOTALLপাইথনে যুক্তির মাধ্যমে ওভাররাইড করা যেতে পারে )। তাই এটিকে একটি ওয়াইল্ডকার্ডও বলা হয় ।

'*'একটি কোয়ান্টিফায়ার (এটি নির্ধারণ করে যে কোনও উপাদান কখন হতে পারে) এর সংক্ষিপ্ত রূপ {0,}

এর অর্থ "শূন্য বা তার বেশি ম্যাচ" - তারার আগে যে গোষ্ঠীটি পাঠ্যে যে কোনও সংখ্যক বার ঘটতে পারে। এটি সম্পূর্ণরূপে অনুপস্থিত বা বারবার পুনরাবৃত্তি হতে পারে।

'?'এছাড়াও একটি পরিমাণ । এর সংক্ষিপ্ত রূপ {0,1}

এর অর্থ "শূন্যের সাথে ম্যাচ বা এই প্রশ্ন চিহ্নের আগের গ্রুপগুলির মধ্যে একটি।" প্রশ্ন চিহ্নের পূর্ববর্তী অংশটি isচ্ছিক হওয়ায় এটিও ব্যাখ্যা করা যেতে পারে ।

উদাহরণ:

pattern = re.compile(r'(\d{2}-)?\d{10}')
mobile1 = pattern.search('My number is 91-9999988888')
mobile1.group()
Output: '91-9999988888'

mobile2 = pattern.search('My number is 9999988888')
mobile2.group()
Output: '9999988888'

উপরের উদাহরণে '?' ইঙ্গিত দেয় যে এর আগে দুটি অঙ্ক alচ্ছিক y তারা সম্ভবত একবারে ঘটতে বা ঘটতে পারে না।

পার্থক্য '.' এবং '?':

'.'কোনও একক চরিত্রকে নিয়মিত প্রকাশের সাথে রাখে এমন জায়গার জন্য এটি মিলছে / গ্রহণ করে / যাচাই করে।

উদাহরণ:

pattern = re.compile(r'.ot')
pattern.findall('dot will identify both hot and got.')
Output: ['dot', 'hot', 'got']

'?'এর আগে থাকা গোষ্ঠীর শূন্য বা একক উপস্থিতি মেলে / যাচাই করে ।

মোবাইল নম্বর উদাহরণ পরীক্ষা করে দেখুন।

একই সাথে যায় '*'। এটি এর আগে থাকা গোষ্ঠীর শূন্য বা আরও উপস্থিতি যাচাই করবে

সমাবেশ:

'.*': উপলব্ধ হিসাবে অনেক ক্রম গ্রহণ করে। লোভী পদ্ধতির

'.*?'প্রথম মিলিত ক্রম গ্রহণ করে এবং থামে। অ লোভী পদ্ধতির

আরও তথ্যের জন্য, নিম্নলিখিত দুটি প্রশ্ন পড়া বিবেচনা করুন ...

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