রেজেক্সে \ বি এবং \ বি এর মধ্যে পার্থক্য


108

আমি নিয়মিত প্রকাশের উপর একটি বই পড়ছি এবং আমি এই উদাহরণটি পেয়েছি \b:

বিড়াল তার খাবারটি পুরো ঘরে ছড়িয়ে দিয়েছে।

Regex ব্যবহার - \bcat\bশব্দ ম্যাচ হবে catকিন্তু catscattered

জন্য \Bলেখক নিম্নলিখিত উদাহরণে ব্যবহার করে:

এটি হিসাবে নয়-অঙ্কের আইডি লিখুন

আপনার রঙে প্রদর্শিত হবে - কোডেড পাস-কী।

শব্দের মধ্যে রেজেক্সের \B-\Bমিল -রয়েছে color - coded। ব্যবহার \b-\bঅন্যদিকে ম্যাচ -মধ্যে nine-digitএবং pass-key

আমরা \bপৃথক করতে ব্যবহৃত প্রথম উদাহরণে catএবং দ্বিতীয় ব্যবহারে কীভাবে \Bপৃথক হতে -পারি? \bদ্বিতীয় উদাহরণ ব্যবহার করে এটি এর আগে যা করেছিল তার বিপরীত কাজ করে।

পার্থক্য আমাকে ব্যাখ্যা করুন।

সম্পাদনা: এছাড়াও, কেউ দয়া করে একটি নতুন উদাহরণ দিয়ে ব্যাখ্যা করতে পারেন?

উত্তর:


89

বিভ্রান্তি আপনার চিন্তার \bস্থানগুলির সাথে মেলে (সম্ভবত "খ" "ফাঁকা" প্রস্তাব দেয়)।

\bশব্দের শুরুতে বা শেষে খালি স্ট্রিংয়ের সাথে মেলে । \Bশব্দের শুরু বা শেষে নয় খালি স্ট্রিংয়ের সাথে মেলে। এখানে মূল কথাটি হ'ল "-" কোনও শব্দের অংশ নয়। সুতরাং <left>-<right>মেলে \b-\bকারণ দুটি দিকে শব্দের সীমা রয়েছে -। অন্যদিকে <left> - <right>(স্পেসগুলি নোট করুন), ড্যাশের উভয় দিকে শব্দের সীমা নেই। শব্দ সীমানা এক স্থান আরও বাম এবং ডান।

অন্যদিকে, \bcat\bশব্দের সীমানা অনুসন্ধান করার সময় আরও স্বজ্ঞাত আচরণ করে এবং এটি প্রত্যাশার সাথে "বিড়াল" এর সাথে মেলে।


4
হ্যাঁ, আমি সত্যিই ফাঁকা জায়গা দিয়ে বিভ্রান্ত করছি। বি। তবে আমি এখনও কিছুটা বিভ্রান্ত বোধ করছি। আমি আপনাকে আরও একটি উদাহরণ জিজ্ঞাসা করতে পারি?
আলোড়ন

4
মূলটি হ'ল এটি -কোনও শব্দের অংশ হিসাবে বিবেচিত হয় না। একইভাবে, !কোনও শব্দের অংশ নয়। তাই আবার \b!\b"ইউনেট! আইমোল্ড" এর সাথে মেলে, তবে "বাহ! আপনি!" আপনি regexpal.com এ এই জিনিস চেষ্টা করে দেখতে পারেন ।
অ্যান্ড্রুডস্কি

@ অ্যান্ড্রুডসকি আমার ক্ষেত্রে বি বিরামচিহ্নগুলির জন্যও ধরা দেয় ... আমি 1987894, 3219800 এ \ বি [এ-জেড -9] + \ বি দিয়ে চেষ্টা করেছি; 234567, 345261. এবং এটি ঠিক কাজ করে, আমি কেবল সংখ্যাগুলি
পেয়েছি

4
কেবল যুক্ত করেই বলেছি যে রেগেক্সে একটি রচনা বর্ণ (a– z এবং A– Z), অঙ্কগুলি এবং "_" [আন্ডারস্কোর] দ্বারা গঠিত। অন্য সব কিছুই শব্দহীন।
মারালক

কেউ এই লাইনটি ব্যাখ্যা করতে পারে\B matches the empty string not at the beginning or end of a word
অরুণ গওদা

69

\bশূন্য প্রস্থের একটি শব্দ সীমানা ary বিশেষত:

একটি শব্দের অক্ষর (\ ডাব্লু দ্বারা মিলিত কিছু) এবং একটি শব্দের অক্ষর ([^ \ ডাব্লু] বা \ ডাব্লু দ্বারা মিলিত কিছু) পাশাপাশি স্ট্রিংয়ের শুরুতে এবং / অথবা শেষের মধ্যে যদি প্রথম হয় তবে এবং / বা স্ট্রিংয়ের শেষ অক্ষরগুলি হ'ল শব্দ অক্ষর।

উদাহরণ: .\bম্যাচ cমধ্যেabc

\Bএকটি শূন্য প্রস্থের শব্দহীন সীমানা। বিশেষত:

দুটি শব্দের অক্ষরের (যেমন \ w \ w এর মধ্যে অবস্থান) পাশাপাশি দুটি শব্দহীন অক্ষরের (যেমন ie W \ W) অবস্থানের সাথে মিল রয়েছে।

উদাহরণ: \B.\Bম্যাচ bমধ্যেabc

নিয়মিত- এক্সপ্রেসন.ইন.ফো দেখুনআরও দুর্দান্ত জন্য


10
+1 কারণ শূন্য-প্রস্থ সংজ্ঞাটির একটি গুরুত্বপূর্ণ অঙ্গ। যদি এটি শূন্য-প্রস্থ না হয়, তবে এটি প্যাটার্নের মিলে যাওয়া অংশগুলিতে সেই শব্দ / অ-শব্দের অক্ষরগুলিও দখল করবে।
বেন হকিং

5
অন্য কথায়, \ বি \ ডাব্লু এবং \ ডাব্লু বা \ ডাব্লু এর মধ্যে স্পট মেলে তবে \ ডাব্লু এবং \ ডাব্লু এর মধ্যে নয় between

4
এই উত্তরটি "অ্যাঙ্কারস" এর অধীনে স্ট্যাক ওভারফ্লো নিয়মিত এক্সপ্রেশন FAQ এ যুক্ত করা হয়েছে ।
aliteralmind 0

4
@stephenhuh string.match()আয় শুধুমাত্র প্রথম ম্যাচ, যদি না আপনি যোগ বিশ্বব্যাপী পতাকা g: "abc def".match(/\b./g)আয়['a', ' ', 'd']
বোহেমিয়ান

4
আমি মনে করি এটি আরও ভাল উত্তর। আমারও গ্রহণযোগ্য হওয়া উচিত কারণ এটি বিভ্রান্তির সমাধান করে। এখানে আরও অনেক কিছু শিখতে হবে।
নেকড়ে

43

একটি পৃথক উদাহরণ সহ:

এটি বিবেচনা করুন এটি 'বিড়াল' এর জন্য অনুসন্ধান করা স্ট্রিং এবং প্যাটার্ন:

text = "catmania thiscat thiscatmaina";

এখন সংজ্ঞা,

'\ বি' প্রতিটি শব্দের শুরুতে বা শেষে প্যাটার্নটি খুঁজে / মেলে matches

'\ বি' প্রতিটি শব্দের শুরুতে বা শেষে প্যাটার্নটি খুঁজে পায় না।

বিভিন্ন কেস:

কেস 1: প্রতিটি শব্দের শুরুতে

result = text.replace(/\bcat/g, "ct");

এখন, ফলাফল "সিটিম্যানিয়া থিস্যাট এই কেটমাইনা"

কেস 2: প্রতিটি শব্দের শেষে

result = text.replace(/cat\b/g, "ct");

এখন, ফলাফলটি হচ্ছে "ক্যাটম্যানিয়া এইেক্ট এই ক্যাটমাইনা"

কেস 3: শুরুতে নয়

result = text.replace(/\Bcat/g, "ct");

এখন, ফলাফলটি "ক্যাটম্যানিয়া টেক্ট এই অ্যাক্টমাইনা"

কেস 4: শেষ পর্যন্ত নয়

result = text.replace(/cat\B/g, "ct");

এখন, ফলাফলটি "সিটিম্যানিয়া থিস্যাট এইটেক্টমাইনা"

কেস ৫: শুরু বা শেষ নেই

result = text.replace(/\Bcat\B/g, "ct");

এখন, ফলাফল "ক্যাটম্যানিয়া থিস্যাট এইটেক্টমাইনা"

আশাকরি এটা সাহায্য করবে :)


আমাকে ভুল করে দিলে দয়া করে আমাকে সংশোধন করুন, তবে, যখন আমাদের স্ট্রিংটি হত, উদাহরণস্বরূপ: "ক্যাটক্যাটটি আমার বিড়াল" => প্রথম শব্দটি (ক্যাটক্যাট) এই শর্তে প্রয়োগ হত। না ?.
কোসেম

@ কোসেম এটি একটি ভাল প্রশ্ন এবং আমাকে \bআরও ভাল করে পড়াশোনা করতে বাধ্য করেছে । আমি যা পরে বুঝতে পেরেছিলাম তা হ'ল প্রথম শব্দের সাথে মেলে না কারণ হ'ল \bcat\bআপনার সাথে বলছেন বিড়ালটিকে অবশ্যই শব্দের সীমানায় ঘিরে রাখা উচিত। catcatএকটি শব্দ সীমানা দিয়ে শুরু হয়, প্রথম ভেতরের catপাওয়া যায় [আমরা এখনও Regex সম্মান করা হয়] কিন্তু তারপর লেজ \bমনোরম করা হয় যে প্রথম পর tcatcatসেখানে অন্য শব্দ সীমানা, যে ক্ষেত্রে থাকতে পারবে না কারণ দ্বিতীয় cমধ্যে catcatঅন্য শব্দ চরিত্র [= শব্দ চলছে] দ্বিতীয় কুঁদন জন্য অনুরূপ কারণ catএরcatcat
Antonino

9

মেটাচার্যাক্টর বি ক্যারেট এবং ডলারের চিহ্নের মতো অ্যাঙ্কর। এটি এমন একটি অবস্থানে মেলে যা "শব্দ সীমানা" বলা হয় called এই ম্যাচটি শূন্য দৈর্ঘ্যের।

তিনটি পৃথক অবস্থান রয়েছে যা শব্দ সীমানা হিসাবে যোগ্য:

  • স্ট্রিংয়ের প্রথম অক্ষরের আগে, প্রথম অক্ষরটি যদি একটি শব্দের অক্ষর হয়।
  • স্ট্রিংয়ের শেষ অক্ষরের পরে যদি শেষ অক্ষরটি একটি শব্দের চরিত্র হয়।
  • স্ট্রিংয়ের দুটি অক্ষরের মধ্যে যেখানে একটি শব্দের চরিত্র এবং অন্যটি শব্দের চরিত্র নয়।

\ বি হ'ল \ খ এর উপেক্ষিত সংস্করণ । Every বি এমন প্রতিটি অবস্থানে মেলে যেখানে \ বি হয় না। কার্যকরভাবে, \ বি দুটি শব্দের অক্ষরের মধ্যে যে কোনও অবস্থানের পাশাপাশি দুটি শব্দহীন অক্ষরের মধ্যে যে কোনও অবস্থানে মেলে।

সূত্র: http://www.regular-expressions.info/wordboundaries.html


3

\bএকটি শব্দ-সীমার সাথে মেলে। \Bঅ-শব্দ-সীমার সাথে মেলে এবং এটি সংশোধন করার জন্য @ অ্যালান মুরকে ধন্যবাদ !) । উভয়ই শূন্য প্রস্থের।[^\b](?!\b)

বিশদ জানতে http://www.regular-expressions.info/wordboundaries.html দেখুন । সাইটটি অনেকগুলি বুনিয়াদি প্রশ্নের জন্য অত্যন্ত উপকারী।


4
\Bএর সমতুল্য নয়[^\b] । একটি অক্ষর শ্রেণি ( [...]বা [^...]) হুবহু একটি অক্ষর গ্রাস করে, যখন শূন্য-প্রস্থের দৃser ়তাগুলি কিছু পছন্দ করে \bএবং গ্রহণ \Bকরে না। আপনি যদি \bএকটি অক্ষর শ্রেণিতে রাখেন তবে এটি সম্পূর্ণ আলাদা অর্থ গ্রহণ করে: [\b]একটি ব্যাকস্পেসের সাথে [^\b]মেলে এবং ব্যাকস্পেস ব্যতীত অন্য কোনও চরিত্রের সাথে মেলে । \Bসত্যিই সমতুল্য (?!\b)
অ্যালান মুর

@ অ্যালান ধন্যবাদ, আপনি সম্পূর্ণরূপে সঠিক - আমি যখন এটি লিখেছিলাম তখন সকালে আমি জাগ্রত ছিলাম না। স্থির।
ম্যাট বল

4
... তবে কেন কেউ ব্যাকস্পেসের সাথে ম্যাচ করতে চায় তা আমার বাইরে। : ডি
অ্যালান মুর

2

\ বি শব্দ সীমা হিসাবে ব্যবহৃত হয়

word = "categorical cat"

উপরের শব্দটিতে সমস্ত "বিড়াল" সন্ধান করুন

বিনা \ বি

re.findall(r'cat',word)
['cat', 'cat']

সাথে \ বি

re.findall(r'\bcat\b',word)
['cat']

1

এর মতো স্ট্রিং নেওয়া যাক:

XIX IXI XX XI II IIXX XXII II II XX-X X- XI IX -X- -IX -XI IX- XI- X_X _X-X-

দ্রষ্টব্য: অ্যান্ডস্কোর (_) এই ক্ষেত্রে বিশেষ চরিত্র হিসাবে বিবেচিত হয় না।

  1. /\bX\b/g একটি বিশেষ চরিত্র বা সাদা স্পেস দিয়ে শুরু এবং শেষ হওয়া উচিত

XIX IXI XX X I II IIXX XXII II X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X_X _X-


  1. /\bX/g একটি বিশেষ চরিত্র বা সাদা স্পেস দিয়ে শুরু করা উচিত

X IX IXI X X X I II IIXX X XII II X - X - X X - X -I I- - এক্স - -I- এক্স - এক্স -আমি নবম - এক্স -I- এক্স _X _X-


  1. /X\b/g একটি বিশেষ চরিত্র বা সাদা স্পেস দিয়ে শেষ হওয়া উচিত

XI X IXI X X X I II IIX X XXII II X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X_ X _ X - এক্স


  1. /\BX\B/g
    করা উচিত না শুরু না একটি বিশেষ অক্ষর বা সাদা স্থান দিয়ে শেষ

XIX IX X I XX XI II II X X X X II II XX XX-X X- XI IX -X- -IX -XI IX- XI- X_X _X-X-


  1. /\BX/gকোনও বিশেষ চরিত্র বা সাদা স্পেস দিয়ে শুরু করা উচিত নয়

XI X I X I X X XI II II XX X X II II XX-X X- XI IX -X- -IX -XI IX- XI- X_ X _ X -


  1. /X\B/gকোনও বিশেষ চরিত্র বা সাদা স্পেস দিয়ে শেষ করা উচিত নয়

এক্স IX I X I X X XI II II X X XX II II XX-X X- XI IX -X- -IX -XI IX- XI- X _X _X- X-


  1. /\bX\B/gকোনও বিশেষ চরিত্র বা সাদা স্পেস দিয়ে শুরু হওয়া উচিত নয়

X IX IXI X X XI II II X X X XII II II XX-X X- XI IX -X- -IX-XI IX- XI- X _X _X- X-


  1. /\BX\b/gকরা উচিত না শুরু এবং একটি বিশেষ অক্ষর বা সাদা স্থান সঙ্গে শেষ হওয়া উচিত

XI X IXI X X XI II IIX X XXII II XX-X X- XI IX -X- -IX-XI IX- XI- X_ X _ X -


1

উত্স © কপিরাইট RexEgg.com

শব্দ সীমানা: \ বি *

সীমানা \ বি শব্দটি এমন অবস্থানগুলির সাথে মেলে যেখানে একপাশে একটি শব্দের অক্ষর (সাধারণত একটি অক্ষর, অঙ্ক বা আন্ডারস্কোর — তবে ইঞ্জিনগুলি জুড়ে পরিবর্তনের জন্য নীচে দেখুন) এবং অন্য দিকটি কোনও শব্দের অক্ষর নয় (উদাহরণস্বরূপ, এটি শুরু হতে পারে স্ট্রিং বা একটি স্পেস অক্ষর)।

রিজেক্স \ বিকেট \ বি, তাই একটি কালো বিড়ালের সাথে বিড়ালের সাথে মিলবে, তবে এটি ক্যাট্যাটোনিক, টমক্যাট বা শংসাপত্রের সাথে মেলে না। একটি সীমানা অপসারণ করে, \ বিসিএইচ ক্যাটফিশে বিড়ালের সাথে মিলবে, এবং বিড়াল বি টমক্যাটে বিড়ালের সাথে মিলবে, তবে বিপরীত নয়। উভয়ই অবশ্যই বিড়ালের সাথে মিলবে match

এক-শব্দ-সীমানা নয়: \ বি

All বি এমন সব পদের সাথে মেলে যেখানে \ বি মেলে না। অতএব, এটি মেলে:

✽ যখন উভয় পক্ষই শব্দের অক্ষর নয়, উদাহরণস্বরূপ স্ট্রিংয়ের যে কোনও অবস্থানে $ = (@ -% ++) (স্ট্রিংয়ের শুরু এবং শেষ সহ)

Both যখন উভয় পক্ষই একটি শব্দের চরিত্র হয়, উদাহরণস্বরূপ হাই এবং এইচ-এর মধ্যে!

এটি খুব দরকারী বলে মনে হচ্ছে না, তবে কখনও কখনও \ বি আপনার পছন্দমতো থাকে। এই ক্ষেত্রে,

C c বিকাট \ বি শংসাপত্রের মতো শব্দের অক্ষর দ্বারা পরিপূর্ণভাবে বিড়ালকে দেখতে পাবে, তবে তা নিজেই নয় বা শব্দের শুরুতে বা শেষে থাকবে না।

✽ বিড়াল \ বি বিড়ালকে শংসাপত্র এবং ক্যাটফিশ উভয়ই খুঁজে পাবে, তবে টমক্যাটে বা তার নিজেরাই নয়।

C \ বিকেট শংসাপত্র এবং টোমক্যাট উভয়ই বিড়ালটি খুঁজে পাবে, তবে ক্যাটফিশে বা তার নিজেরাই নয়।

\ C বিকাট | বিড়াল \ বি এম্বেড অবস্থায় বিড়ালটি খুঁজে পাবে, যেমন শংসাপত্র, ক্যাটফিশ বা টোমক্যাট, তবে নিজস্ব নয়।


0

\Bহয় না \b যেমন নেতিবাচক \b

pass-keyএখানে কোনও শব্দের সীমানা নেই -সুতরাং এটি \Bআপনার প্রথম উদাহরণে মেলে যেখানে বিড়ালের পাশে শব্দের সীমানা রয়েছে তাই এটি মেলে\b

একই নিয়ম অন্যদের জন্যও প্রযোজ্য। \Wনেতিবাচক \w \UPPER CASEহয় নেতিবাচক\LOWER CASE

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