2011-09-02 15 views
86

है कि मैं कैसे जांच सकता हूं कि किसी दिए गए स्ट्रिंग में पर्ल का उपयोग करके एक निश्चित सबस्ट्रिंग है या नहीं?जांचें कि क्या स्ट्रिंग में एक सबस्ट्रिंग

अधिक विशेष रूप से, मैं देखना चाहता हूं कि s1.domain.com दिए गए स्ट्रिंग चर में मौजूद है या नहीं।

उत्तर

179

पता लगाने के लिए एक स्ट्रिंग सबस्ट्रिंग आप index समारोह उपयोग कर सकते हैं यदि:

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

यह $str में $substr की पहली आवृत्ति की स्थिति वापस आ जाएगी, या -1 अगर सबस्ट्रिंग नहीं मिला है।

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

बैकस्लैश क्योंकि एक . किसी भी चरित्र से मेल कर सकते हैं की जरूरत है:

+5

इस तरह विशेष रूप से preferrable है, जब आप कर रहे हैं एक चर का उपयोग करके खोज - इस तरह आपको अक्षरों से बचने की आवश्यकता नहीं होगी (इस चर स्ट्रिंग में), जो नियमित अभिव्यक्तियों के लिए विशेष हैं (जैसे ':')। – evgeny9

49

एक और संभावना regular expressions है जो पर्ल के लिए प्रसिद्ध है उपयोग करने के लिए है। आप \Q और \E ऑपरेटरों का उपयोग करके इसे प्राप्त कर सकते हैं।

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

या, आप के रूप में eugene y कहा करते हैं और index फ़ंक्शन का उपयोग कर सकते हैं। चेतावनी का एक शब्द: इंडेक्स -1 देता है जब इसे undef या 0 के बजाय कोई मिलान नहीं मिल रहा है।

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

यह अगर s1.domain.com अपने स्ट्रिंग की शुरुआत में है गलत होगा:

इस प्रकार, यह एक त्रुटि है। मैं व्यक्तिगत रूप से इसे एक से अधिक बार जला दिया गया है।

+0

मुझे लगता है कि 'मामला') सरल मामले में regexps से तेज है? –

+1

[सबस्ट्रिंग्स को हटाने] के बारे में एक प्रश्न का उत्तर देने का प्रयास किया गया (http://stackoverflow.com/a/35593275/2019415) - मैंने गति की तुलना नहीं की लेकिन '= ~', 'अनुक्रमणिका()', '~~' और ['मैच :: सरल'] (https://metacpan.org/pod/match::simple) सभी थोड़ा 'अजीब'-वार्ड लग रहा था ...: - \ –

+0

आपको यह भी सुनिश्चित करना होगा कि तार कि आप तुलना कर रहे हैं केस संवेदनशील नहीं है। S1.DOMAIN.COM सबस्ट्रिंग के लिए काम नहीं करेगा। लेकिन अगर आप एलसी ($ givendomain), और फिर "s1.domain.com" के साथ इसकी तुलना करें, तो यह काम करेगा। इसके अलावा, सबस्ट्रिंग जरूरी सही दृष्टिकोण नहीं है - यूजीन की प्रतिक्रिया – BlueChips23

11

केस संवेदी सबस्ट्रिंग उदाहरण

यह यूजीन के जवाब है, जो सबस्ट्रिंग के लिए जाँच से पहले लोअर केस में तार धर्मान्तरित का एक विस्तार है:

if (index(lc($str), lc($substr)) != -1) { 
    print "$str contains $substr\n"; 
} 
संबंधित मुद्दे