2013-03-14 4 views
5

क्या किसी कथन में वाइल्डकार्ड का उपयोग करना संभव है?शेल-शैली वाइल्डकार्ड के साथ मिलान करने वाली स्ट्रिंग (उदा।, *)

मेरे कोड:

* = वाइल्डकार्ड

if ($admin =='*@some.text.here') { 

} 

$admin इनमें से किसी एक हो जाएगा:

+0

http://php.net/manual/en/function.preg-match.php – Teson

+0

नहीं, लेकिन आप शायद preg_match तो तुम क्या चाहते करने के लिए उपयोग कर सकते हैं। – j08691

+0

आईआरसी के साथ इसका क्या संबंध है? –

उत्तर

13

यदि आप नियमित अभिव्यक्तियों का उपयोग नहीं करना चाहते हैं, तो fnmatch() इस [सीमित] उद्देश्य के लिए आपको अच्छी तरह से सेवा दे सकता है। यह शैल-जैसे वाइल्डकार्ड का उपयोग करके तारों से मेल खाता है जैसे आप उम्मीद कर रहे हैं।

if (fnmatch('*@some.text.here', $admin)) { 

} 
+1

मैं आपको इसके लिए एक +1 देने वाला हूं, मैंने कभी भी उस काम को बहुत उपयोगी नहीं देखा है। – Dave

+0

fnmatch 4096 वर्णों से अधिक लंबे समय तक फ़ाइल नामों के बारे में चेतावनियों के साथ विफल रहता है। चूंकि मैं डेटासेट से मेल नहीं खाता हूं, इसलिए मैं fnmatch – slebetman

+0

@slebetman धन्यवाद का उपयोग नहीं कर सकता। जानकार अच्छा लगा। – Wiseguy

1
if (strstr ($admin,"@some.text.here")) { 

} 

उपयोग strstr() यह तुम क्या चाहते या करूँगा के रूप में stristr ने बताया()

या आप इस

$pos = strrpos($mystring, "@some.text.here"); 
if ($pos === false) { // note: three equal signs 
    // not found... 
} else { 
    //found 
} 

की तरह या अंत से strpos कुछ का उपयोग कर सकते (मुझे लगता है कि इसका परीक्षण नहीं किया गया)

$checkstring = "@some.text.here"; 
$pos = strrpos($mystring, $checkstring, -(strlen($checkstring))); 
if ($pos === false) { // note: three equal signs 
    // not found... 
} else { 
    //found 
} 
+0

स्ट्रिस्टर इस – Waygood

+0

का मामला असंवेदनशील संस्करण है, यह मानता है कि इससे कोई फर्क नहीं पड़ता कि स्ट्रिंग के अंत में '@ some.text.here' है या नहीं। – Emissary

+0

उन्होंने अपने उदाहरण में यह नहीं बताया कि वह पाठ में एक निश्चित स्थान पर होने के बारे में विशिष्ट थे, बस यह पाठ में था। आप हमेशा स्ट्रॉन्स ऑफसेट के साथ स्ट्रॉप्स का उपयोग कर सकते हैं, भले ही आप कहीं भी – Dave

3

आप केवल यह जांच सकते हैं कि स्ट्रिंग आपके द्वारा अर्जित मूल्य के साथ समाप्त होती है ई की उम्मीद: आपको विश्वास है कि @ some.text.here होता है होना करने के लिए की जरूरत है

if (strpos($admin, '@some.test.here') !== false) { } 

: अगर एक स्ट्रिंग एक और स्ट्रिंग में पाया जाता है strpos() होगा

$suffix = '@some.text.here'; 

if (substr($admin, -strlen($suffix)) == $suffix) { 
    // Do something 
} 
0

सबसे तेजी से विधि की जाँच करने के अंत में, आप इसके बजाय substr_compare() का उपयोग करना चाहेंगे।

if (substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0) {} 
+0

यदि यह उसके साथ शुरू होता है, तो लौटाई गई स्थिति 0 = झूठी है - डेव का उत्तर – Waygood

+0

देखें यदि समस्या यह है कि '0' को स्पष्ट रूप से 'झूठी' में परिवर्तित किया गया है, _explicitly_ इसे 'झूठी' में परिवर्तित कर रहा है (' !! 'या प्रत्यक्ष के साथ कास्टिंग) इसे बदलने वाला नहीं है। – Wiseguy

+0

ओह वाह, बिल्कुल सही। पता नहीं कि मैं उस पर क्या सोच रहा था। – Sturm

3

यहां आपके लिए वाइल्डकार्ड फ़ंक्शन है।
जैसा कि आप * का उपयोग करना चाहते हैं, मैंने केवल . (एकल वर्ण मिलान) पर टिप्पणी की है।

यह आपको भर वाइल्डकार्ड का उपयोग करने की अनुमति देगा:
*xxx - समाप्त होता है "xxx"
xxx* - शुरू होता है "XXX"
xx*zz - "XX" के साथ शुरू होता है और "ZZ"
*xx* साथ समाप्त होता है - है " xx "मध्यम

function wildcard_match($pattern, $subject) 
{ 
    $pattern='/^'.preg_quote($pattern).'$/'; 
    $pattern=str_replace('\*', '.*', $pattern); 
    //$pattern=str_replace('\.', '.', $pattern); 
    if(!preg_match($pattern, $subject, $regs)) return false; 
    return true; 
} 
if (wildcard_match('*@some.text.here', $admin)) { 

} 

लेकिन में मैं अपने आप को preg_match() साथ regular expressions उपयोग करने के लिए सीखने के सुझाव देते हैं।

+2

['fnmatch()'] (http://php.net/fnmatch) पर एक नज़र डालें। – Wiseguy

+0

ओह! पहले कभी नहीं देखा! अच्छा! – Waygood

संबंधित मुद्दे