রেগেক্স প্লাস বনাম তারকা পার্থক্য?


90

পার্থক্য কি:

(.+?)

এবং

(.*?)

যখন আমি এটি আমার পিএইচপি preg_matchরেজেজেসে ব্যবহার করব ?

উত্তর:


150

এদেরকে কোয়ানটিফায়ার বলা হয়।

* পূর্ববর্তী প্রকাশের 0 বা আরও বেশি

+ পূর্বের প্রকাশের 1 বা আরও বেশি

ডিফল্ট হিসাবে একটি কোয়ান্টিফায়ার লোভী, এর অর্থ এটি যতটা সম্ভব চরিত্রের সাথে মেলে।

?একটি কোয়ান্টিফায়ার পর আচরণ পরিবর্তন কোয়ান্টিফায়ার "ungreedy" করা, মানে এটা সম্ভব হিসাবে সামান্য হিসাবে ম্যাচ হবে।

লোভী / নিরোগের উদাহরণ

স্ট্রিং "এ উদাহরণস্বরূপ abab "

a.*b "আবাব" মিলবে (পূর্ববর্তী_ম্যাচ_একটি ম্যাচ ফিরবে, "আবাব")

যখন a.*?bকেবলমাত্র শুরু হওয়া "আব" সাথে মেলে (পূর্ববর্তী_ম্যাচ_ সমস্ত দুটি ম্যাচ ফিরবে, "আব")

আপনি অনলাইনে আপনার রেজিক্সগুলি পরীক্ষা করতে পারেন যেমন রেজেক্সারের উপর, লোভী উদাহরণটি এখানে দেখুন


4
"অলস" হ'ল "অসম্পূর্ণ" এর পক্ষে আরও সাধারণ শব্দ
ওয়াল্টার ট্রস

উদাহরণটি ভুল। উভয় (.+?)এবং (.*?)রেগুলার এক্সপ্রেশনের যা একটি বিভিন্ন অবস্থানে ভিন্নভাবে আচরণ a(.+?), (.+?)b, a(.+?)b, a(.*?), (.*?)b, a(.*?)b
লুই 55

কেন একটি। * খ "আব" ফেরত দেবে না? এটি কি "এমন শব্দটি বলছে না যার সাথে a এবং b, 0 বা আরও বেশি অক্ষর রয়েছে", সুতরাং আবের মধ্যে শূন্য চরিত্র রয়েছে এবং এটি একটি মিল হতে পারে। কেন এটি ভুল?
হ্যালো ওয়ার্ল্ড

@ হেলো ওয়ার্ল্ড, এটি আমি উপরে বর্ণিত লোভের সাথে সম্পর্কযুক্ত। .*যতটা সম্ভব মিলবে। যদি আপনি যত তাড়াতাড়ি সম্ভব থামতে চান, তবে আপনাকে এটিকে নিরপেক্ষ করতে হবে.*?
স্টিমা

22

প্রথম ( +) হ'ল এক বা একাধিক অক্ষর । দ্বিতীয় ( *) হ'ল শূন্য বা আরও বেশি অক্ষর । উভয়ই লোভী ( ?) এবং কোনও কিছুর সাথে মেলে ( .)।


4
এটির উপর নির্ভর করে এস মডিফায়ার সেট করা আছে কি না।
কোয়ান্টিন

8

একটি পূর্ববর্তী প্যাটার্নের এক বা একাধিক উদাহরণের সাথে +মেলে । পূর্ববর্তী প্যাটার্নের শূন্য বা আরও বেশি উদাহরণগুলির সাথে একটি মিলছে ।*

সুতরাং মূলত, আপনি যদি এটি ব্যবহার করেন +তবে অবশ্যই প্যাটার্নটির কমপক্ষে একটি উদাহরণ থাকতে হবে, আপনি যদি *এটি ব্যবহার করেন তবে এটির কোনও উদাহরণ না থাকলে এটি এখনও মিলবে।


8

+ কমপক্ষে একটি চরিত্রের সাথে মেলে

* অক্ষরের কোনও সংখ্যার (0 সহ) মিলছে

?একটি অলস অভিব্যক্তি ইঙ্গিত, তাই এটি যতটা সম্ভব কয়েকটি অক্ষর যেমন ম্যাচ হবে।


8

নীচে বিবেচনা করুন মেলা স্ট্রিং।

ab

প্যাটার্ন (ab.*)ফলাফলের সাথে ক্যাপচার গ্রুপের জন্য একটি ম্যাচ ফিরিয়ে দেবেab

যদিও প্যাটার্নটি (ab.+)মেলে না এবং কোনও কিছু ফেরত দেয় না।

তবে আপনি যদি স্ট্রিংটিকে অনুসরণ করে পরিবর্তন করেন তবে এটি abaপ্যাটার্নের জন্য ফিরে আসবে(ab.+)

aba

আমি মনে করি এটি + বনাম *
টেরেন্স

6

+সর্বনিম্ন এক, *পাশাপাশি শূন্য হতে পারে।


"+ is minimal one"এই বাক্যটির অর্থ কি?
Det

5

Regex সালে {i,f}"এর মাঝে অর্থ iথেকে fম্যাচ"। আসুন নীচের উদাহরণগুলি একবার দেখুন:

  • {3,7} মানে 3 থেকে 7 ম্যাচ
  • {,10} যার অর্থ হ'ল কম সীমা ছাড়াই 10 টি ম্যাচ (যেমন নিম্ন সীমাটি 0)
  • {3,} মানে কোনও উচ্চতর সীমা ছাড়াই কমপক্ষে 3 টি ম্যাচ (অর্থাত্ উচ্চ সীমাটি অসীম)
  • {,} মানে মিলের সংখ্যার জন্য কোনও উচ্চতর সীমা বা নিম্ন সীমা নেই (উদাহরণস্বরূপ নিম্ন সীমাটি 0 এবং উপরের সীমাটি অসীম)
  • {5} মানে ঠিক 4

বেশিরভাগ ভাল ভাষায় সংক্ষিপ্তসার থাকে, তবে রেজিএক্স:

  • + সংক্ষিপ্ত {1,}
  • * সংক্ষিপ্ত {,}
  • ? সংক্ষিপ্ত {,1}

এর অর্থ +কমপক্ষে 1 টি ম্যাচ প্রয়োজন যখন *কোনও সংখ্যক ম্যাচ বা কোনও ম্যাচই ?গ্রহণ করে না এবং 1 টির বেশি ম্যাচ বা শূন্য ম্যাচ গ্রহণ করে না।

ক্রেডিট: কোডেক্যাডেমি.কম


4

একটি তারকা একটি প্লাসের সাথে খুব সমান, কেবল পার্থক্যটি হ'ল প্লাসটি পূর্ববর্তী চরিত্র / গোষ্ঠীর সাথে 1 বা আরও বেশি মেলে, তারার 0 বা তার বেশি মিলবে।


2

আমি মনে করি পূর্ববর্তী উত্তরগুলি একটি সাধারণ উদাহরণ হাইলাইট করতে ব্যর্থ হয়েছে:

উদাহরণস্বরূপ আমাদের একটি অ্যারে রয়েছে:

numbers = [5, 15]

নিম্নলিখিত রেজেক্স অভিব্যক্তি ^[0-9]+মেলে: 15কেবলমাত্র। তবে ^[0-9]*দুজনের সাথেই মিলছে 5 and 15। পার্থক্যটি হ'ল +অপারেটরের পূর্ববর্তী রেজেক্স এক্সপ্রেশনটির কমপক্ষে একটি সদৃশ প্রয়োজন

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