স্ট্রিংয়ের একটি স্ট্রিং রয়েছে কিনা তা পরীক্ষা করুন


113

পার্ল ব্যবহার করে কোনও প্রদত্ত স্ট্রিংয়ে একটি নির্দিষ্ট সাবস্ট্রিং রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

আরও নির্দিষ্টভাবে, আমি দেখতে চাই s1.domain.comযে প্রদত্ত স্ট্রিং ভেরিয়েবলটিতে উপস্থিত রয়েছে কিনা ।

উত্তর:


231

কোনও স্ট্রিংয়ে সাবস্ট্রিং রয়েছে কিনা তা জানতে আপনি indexফাংশনটি ব্যবহার করতে পারেন :

if (index($str, $substr) != -1) {
    print "$str contains $substr\n";
} 

এটা তোলে প্রথম সংঘটন অবস্থান ফিরে আসবে $substrমধ্যে $str, বা -1 যদি সাবস্ট্রিং পাওয়া যায় না।


6
এই উপায়টি বিশেষত পছন্দনীয়, যখন আপনি কোনও ভেরিয়েবল ব্যবহার করে অনুসন্ধান করছেন - এইভাবে আপনাকে অক্ষরগুলি (এই পরিবর্তনশীল স্ট্রিংয়ে) ডাবল-পলায়ন করতে হবে না, যা নিয়মিত প্রকাশের জন্য বিশেষ (যেমন :)।
evgeny9

57

আরেকটি সম্ভাবনা হ'ল নিয়মিত এক্সপ্রেশন ব্যবহার করা যা পার্ল এর জন্য বিখ্যাত:

if ($mystring =~ /s1\.domain\.com/) {
   print qq("$mystring" contains "s1.domain.com"\n);
}

ব্যাকস্ল্যাশগুলির প্রয়োজন কারণ একটি .কোনও চরিত্রের সাথে মেলে। আপনি ব্যবহার করে পার করে ফেলতে পারি \Qএবং \Eঅপারেটর।

my $substring = "s1.domain.com";
    if ($mystring =~ /\Q$substring\E/) {
   print qq("$mystring" contains "$substring"\n);
}

অথবা, আপনি ইউজেন ওয়াইয়ের মতো কাজ করতে পারেন এবং সূচক ফাংশনটি ব্যবহার করতে পারেন । কেবলমাত্র সতর্কতার শব্দ: সূচকটি -1যখন এমন পরিবর্তিত হয় যখন এটি কোনও undefবা এর পরিবর্তে কোনও মিল খুঁজে পায় না 0

সুতরাং, এটি একটি ত্রুটি:

my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
    print qq("$mystring" doesn't contains "$substring"\n";
} 

s1.domain.comআপনার স্ট্রিংয়ের শুরুতে এটি ভুল হবে । আমি ব্যক্তিগতভাবে এটি একাধিক বার পোড়া হয়েছে।


আমি মনে করি index()সহজ ক্ষেত্রে রেগেক্সপসের চেয়ে দ্রুত?
জি সিটো

1
প্রায় এক এক প্রশ্নের Perl উত্তর চেষ্টা সাবস্ট্রিং সরানোর - আমি গতি তুলনা করা হয়নি কিন্তু =~, index(), ~~এবং match::simpleসমস্ত একটি বিট লাগে awk\: - -ward ...
জি দ্রুত

আপনাকে এটিও নিশ্চিত করতে হবে যে আপনি যে স্ট্রিংগুলির সাথে তুলনা করছেন তা কেস সংবেদনশীল নয়। S1.DOMAIN.COM সাবস্ট্রিংয়ের জন্য কাজ করবে না। তবে আপনি যদি LC ($ givendomain) করেন এবং তারপরে এটি "s1.domain.com" এর সাথে তুলনা করেন তবে তা কার্যকর হবে। এছাড়াও, সাবস্ট্রিং অগত্যা সঠিক পদ্ধতির নয়
ইউজেন ওয়াইয়ের

@ ডেভিড ডাব্লু। কোনওভাবেই আমি উপরের রেগেক্স ব্যবহার করে কোনও domain.comমিল করতে পারি না subdomain.domain.com, কোনও ধারণা?
অ্যাভ্রোনো

14

কেস সংবেদনশীল সাবস্ট্রিং উদাহরণ

এটি ইউজিনের উত্তরের একটি বর্ধন, যা স্ট্রিংগুলি পরীক্ষা করার আগে স্ট্রিংগুলিকে লোয়ার কেসে রূপান্তরিত করে:

if (index(lc($str), lc($substr)) != -1) {
    print "$str contains $substr\n";
} 

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