কোনও শব্দ বা এর উপসর্গের সাথে মেলে নিয়মিত প্রকাশ ular


119

আমি একটি সম্পূর্ণ শব্দের উপর নিয়মিত প্রকাশের সাথে মিল রাখতে চাই।

নিম্নলিখিত উদাহরণে আমি মেলে চেষ্টা করছি sবা seasonকিন্তু কি আমি ম্যাচ আছে s, e, a, oএবং n

[s|season]

আমি কীভাবে একটি সম্পূর্ণ শব্দের সাথে মেলে নিয়মিত প্রকাশ করব?


4
(season|s)পরিবর্তে ব্যবহার করুন। [season]এর কোনো মিল s, e, a, o, n
ফলসেটরু

উত্তর:


137

স্কয়ার বন্ধনী চরিত্র বর্গ জন্য বোঝানো হয়, এবং আপনি আসলে যে কোনো একটি মেলে করার চেষ্টা করছেন: s, |, s(আবার), e, a, s(আবার), oএবং n

গ্রুপিংয়ের পরিবর্তে প্রথম বন্ধনী ব্যবহার করুন:

(s|season)

বা নন-ক্যাপচারিং গ্রুপ:

(?:s|season)

দ্রষ্টব্য: নন-ক্যাপচার গ্রুপগুলি ইঞ্জিনকে বলে যে এটি ম্যাচ সঞ্চয় করার দরকার নেই, অন্যদিকে (ক্যাপচারিং গ্রুপটি করে)। ছোট জিনিসগুলির জন্য, হয় কাজ করে, 'ভারী শুল্ক' স্টাফের জন্য, আপনি ম্যাচটি প্রয়োজন কিনা তা আপনি প্রথমে দেখতে চাইতে পারেন। যদি আপনি এটি না করেন, এমন কিছু সঞ্চয় করার পরিবর্তে গণনার জন্য আরও মেমরি বরাদ্দ করার জন্য নন-ক্যাপচার গ্রুপটিকে আরও ভালভাবে ব্যবহার করুন যা আপনাকে কখনও ব্যবহারের প্রয়োজন হবে না।


হ্যাঁ আমি বুঝতে পেরেছিলাম। নন-ক্যাপচারিংটি আমার যা প্রয়োজন ছিল তা ছিল। আমি ভেবেছিলাম () ব্যবহার করা সবসময় মিলবে, জেনে নাও মেলে না করার একটি বিকল্প হ'ল সহজ, আপনাকে ধন্যবাদ।
এনএমজিড

আপনি যে ভুল বুঝতে পেরেছিলেন। ?:ভিতরে ওরফে গোষ্ঠীবদ্ধ non-capturingশুধু বলছেন, যে আপনার সাথে মিলেছে এক্সপ্রেশন ব্যবহার করতে পারবেন না $1, $2এবং তাই ... যদি তুমি চাও একটি অভিব্যক্তি মেলে না, কি আপনার প্রয়োজন হয় ^
EverythingRightPlace

@ এনএমজিডএ 1 বি 2 সি 3 ডি 4 আপনাকে স্বাগতম! আপনার অর্থ কি মিল না করা বা ধরার বিকল্প নয় (একটি পার্থক্য আছে, হ্যাঁ)। আপনি যদি এর (?! ... )কোনওটির সাথে মেলে না নিতে চান তবে আপনি ইনসাইড ব্যবহার করবেন, (?!s|season)এই ক্ষেত্রে এর অর্থ ।
জেরি

126

আপনার প্যাটার্নটি পরীক্ষা করতে এই লাইভ অনলাইন উদাহরণটি ব্যবহার করুন:

এখানে চিত্র বর্ণনা লিখুন

এই লাইভ উদাহরণ থেকে নেওয়া উপরের স্ক্রিনশট: https://regex101.com/r/cU5lC2/1

কমান্ডলাইনে কোনও পুরো শব্দের সাথে মিলছে।

আমি ব্যবহার করছি phpsh ইন্টারেক্টিভ শেল উপর উবুন্টু 12.10 প্রকট PCRE Regex ইঞ্জিন পদ্ধতি নামে পরিচিত মাধ্যমে preg_match

পিএইচপিএস শুরু করুন, কিছু কন্টেন্টকে ভেরিয়েবলে রেখে শব্দের সাথে মিল দিন।

el@apollo:~/foo$ phpsh

php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'

php> echo preg_match('(\w+)', $content1);
1

php> echo preg_match('(\w+)', $content2);
1

php> echo preg_match('(\w+)', $content3);
0

প্রিগ_ম্যাচ পদ্ধতিটি ভেরিয়েবলগুলি বিশ্লেষণ করতে $content1, $content2এবং প্যাটার্ন $content3সহ পিএইচপি ভাষার মধ্যে পিসিআরই ইঞ্জিন ব্যবহার করে (\w)+

$ বিষয়বস্তু 1 এবং $ বিষয়বস্তু 2 তে কমপক্ষে একটি শব্দ থাকে, $ সামগ্রী3 থাকে না not

কমান্ডলাইনে শব্দের অনুষঙ্গ ছাড়াই একটি নির্দিষ্ট শব্দ মেলে M

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(dart|fart)', $gun1);
1

php> echo preg_match('(dart|fart)', $gun2);
1

php> echo preg_match('(dart|fart)', $gun3);
1

php> echo preg_match('(dart|fart)', $gun4);
0

ভেরিয়েবল gun1এবং gun2স্ট্রিং থাকে dartবা fartযা সঠিক, তবে বন্দুক 3 এর মধ্যে রয়েছে dartyএবং এখনও মিল রয়েছে , এটাই সমস্যা। সুতরাং পরবর্তী উদাহরণ সম্মুখের দিকে।

শব্দের সীমানার সাথে কমান্ডলাইনে নির্দিষ্ট শব্দগুলি মেলে:

শব্দ সীমানা এর সাথে জোর করে মিলিত হতে পারে \b, দেখুন: Jex.im/regulex থেকে ওয়ার্ডবাউন্ডারি কী করছে তার চাক্ষুষ বিশ্লেষণ

রেজেক্স ভিজ্যুয়াল চিত্রটি http://jex.im/regulex এবং https://github.com/JexCheng/regulex থেকে অর্জিত উদাহরণ:

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0

php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0

\bদাবি যে আমরা একটি শব্দ সীমানা আছে, নিশ্চিত করুন "ডার্ট" উপার্জন মিলেছে হয়, কিন্তু "darty" নয়।


3
upvated কারণ আমি char বি চর প্রয়োজন, এবং এটি জানেন না!
নিমিনেন

কেন এই পুরো ব্যাখ্যাটি উত্তর নয়?
দেওয়ালওয়াল্ড

1
কারণ যে ব্যক্তি প্রশ্ন পোস্ট করেছেন সে প্রথম যে উত্তরটি এসেছিল তা বেছে নিয়েছে এবং পরে যখন আমার চূড়ান্ত উত্তরের উত্তরটি এসেছিল তখন আমার দিকে চলে যাওয়ার বিরক্ত করেনি। আপনি প্রশ্নকর্তাকে প্রশ্নের উত্তর অনুসারে মন্তব্যের মাধ্যমে তার উত্তর নির্বাচনকে এটির পরিবর্তনের জন্য জিজ্ঞাসা করতে পারেন, এবং এটি যে পৃষ্ঠায় অবতরণ করেছে তাদের কাছে এই পৃষ্ঠার মান উন্নত করবে।
এরিক লেসচিনস্কি

1
আমি উত্সাহিত করেছি কারণ আপনি আপনার উদাহরণে "ফার্ট" শব্দটি ব্যবহার করেছেন ... এবং আমার \ ডাব্লু +;) দরকার ছিল
সামথিং 24


4

আমি উদাহরণস্বরূপ জেএসে পরীক্ষা করি। সহজ সমাধান - আপনার / / এর ভিতরে কেবল শব্দটি যুক্ত করুন

var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result

এখন আপনার যদি সীমা যুক্ত এই নির্দিষ্ট শব্দটির প্রয়োজন হয় তবে অন্য কোনও চিহ্ন-অক্ষরের অভ্যন্তরে নয়। আমরা বি মার্কার ব্যবহার করি :

var reg = /\bcat\b/
reg.test('acatb');//1 test 
false // result
reg.test('have cat here');//2 test
true // result

আমাদের জেএসে এক্সিকিউট () পদ্ধতিও রয়েছে, যার ফলে বস্তুর ফলাফল পাওয়া যায়। এটি আমাদের শব্দের স্থান / সূচী সম্পর্কে তথ্য পেতে এফগিকে সহায়তা করে।

var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5

আমাদের যদি স্ট্রিং / বাক্য / পাঠ্যে সব মিলিয়ে শব্দগুলি পেতে হয় তবে আমরা জি সংশোধক (গ্লোবাল ম্যাচ) ব্যবহার করতে পারি:

"cat good cat good cat".match(/\bcat\b/g).length
// 3 

এখন শেষটি - আমার 1 টি নির্দিষ্ট শব্দের দরকার নেই, তবে এর মধ্যে কয়েকটি। আমরা ব্যবহার করি | চিহ্ন, এর অর্থ পছন্দ / বা।

"bad dog bad".match(/\bcat|dog\b/g).length
// 1

2

[ ]একটি চরিত্র শ্রেণি সংজ্ঞায়িত করে। সুতরাং আপনি যে চরিত্রটি সেট করেছেন সেখানে মিলবে। [012]মিলবে 0বা 1বা 2এবং [0-2]একই আচরণ করবে।

আপনি যা চান তা হ'ল একটি বিবৃতি বা বিবৃতি সংজ্ঞায়িত করা ings ব্যবহার(s|season)আপনার সমস্যার জন্য ।

BTW। তোমাকে নজর রাখতে হবে সাধারণ রেজেেক্সে (বা গোষ্ঠীকরণের অভ্যন্তরে) মেটাচার্যাক্টরগুলি অক্ষর শ্রেণীর চেয়ে পৃথক। একটি চরিত্র শ্রেণি একটি উপ-ভাষার মতো। [$A]কেবল মিলবে $বা A, কিছুই নয়। এখানে ডলারের জন্য কোনও রক্ষা নেই।

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