मैं कैसे जांच सकता हूं कि क्या दिए गए स्ट्रिंग में पर्ल के उपयोग से एक निश्चित सबस्ट्रिंग है?
विशेष रूप से, मैं देखना चाहता हूं कि s1.domain.com
दिए गए स्ट्रिंग चर में मौजूद है या नहीं ।
मैं कैसे जांच सकता हूं कि क्या दिए गए स्ट्रिंग में पर्ल के उपयोग से एक निश्चित सबस्ट्रिंग है?
विशेष रूप से, मैं देखना चाहता हूं कि s1.domain.com
दिए गए स्ट्रिंग चर में मौजूद है या नहीं ।
जवाबों:
यह पता लगाने के लिए कि क्या स्ट्रिंग में स्ट्रिंग है आप index
फ़ंक्शन का उपयोग कर सकते हैं :
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
यह की पहली आवृत्ति की स्थिति वापस आ जाएगी $substr
में $str
, या -1 अगर सबस्ट्रिंग नहीं मिला है।
एक और संभावना यह है कि नियमित अभिव्यक्ति का उपयोग करें जो कि पर्ल के लिए प्रसिद्ध है:
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()
है कि सरल मामले में regexps से तेज है?
=~
, index()
, ~~
और match::simple
सब एक सा लग रहा था awk
\ -: -ward ...
domain.com
मैच नहीं कर सकता subdomain.domain.com
, किसी भी विचार?
केस असंवेदनशील पदार्थ उदाहरण
यह यूजीन के उत्तर का विस्तार है, जो स्ट्रिंग को निचोड़ने से पहले निचली स्थिति में परिवर्तित करता है:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:
) के लिए विशेष हैं ।