2010-11-08 20 views
48

मुझे एक रेगेक्स चाहिए जो केवल उन मैचों को ढूंढेगा जहां संपूर्ण स्ट्रिंग मेरी क्वेरी से मेल खाती है।मैं एक संपूर्ण स्ट्रिंग को रेगेक्स से कैसे मेल करूं?

उदाहरण के लिए यदि मैं "लाल अक्टूबर" नाम के साथ फिल्मों की खोज करता हूं तो मैं केवल उस सटीक शीर्षक (केस असंवेदनशील) पर मिलान करना चाहता हूं लेकिन "हंट फॉर रेड अक्टूबर" जैसे खिताब से मेल नहीं खाता हूं। मुझे यकीन नहीं है कि मुझे यह कैसे करना है। किसी को पता है?

धन्यवाद!

+1

क्यों तुम कुछ है कि एक साधारण 'string.Contains' के लिए काम करेंगे के लिए एक regex की जरूरत है? – Oded

+0

कारण मैं एक regex का उपयोग करने की जरूरत है कि मैं MongoDB में एक खोज के लिए यह प्रयोग कर रहा हूँ और मैं की जरूरत है यह केस संवेदी है जो केवल एक regex – Micah

+0

क्यों करने के लिए (ऑन-मक्खी) डाटाबेस डेटा परिवर्तित नहीं किया जा सकता है होना करने के लिए करने के लिए खोज के लिए लोअरकेस और उपयोगकर्ता लोअर केस स्ट्रिंग? – greenoldman

उत्तर

73

निम्नलिखित नियमित अभिव्यक्ति का प्रयास करें::

^Red October$ 

डिफ़ॉल्ट रूप से

string myTest = "Red October"; 
bool isMatch = (myTest.ToLower() == "Red October".ToLower()); 
Console.WriteLine(isMatch); 
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower()); 
1

क्षमा करें, लेकिन यह थोड़ा अस्पष्ट है।

जो मैंने पढ़ा है, उससे आप सरल स्ट्रिंग तुलना करना चाहते हैं। इसके लिए आपको रेगेक्स की आवश्यकता नहीं है।

^Red October$ 
+0

मुझे रेगेक्स का उपयोग करने की आवश्यकता यह है कि मैं इसे मोंगोडीबी में एक खोज के लिए उपयोग कर रहा हूं और मुझे इसे असंवेदनशील होने की आवश्यकता है जो केवल रेगेक्स के साथ किया जा सकता है। – Micah

8

आप ^ (स्ट्रिंग की शुरुआत) और $ (स्ट्रिंग के अंत) में regex शामिल करनी , नियमित अभिव्यक्ति केस संवेदनशील हैं। ^ मेल खाने वाले पाठ की शुरुआत और $ अंत की ओर जाता है।

14

उपयोग ^ और $ संशोधक निरूपित करने के लिए जहां regex पैटर्न प्रारंभ और स्ट्रिंग के अंत के सापेक्ष बैठता है:

Regex.Match("Red October", "^Red October$"); // pass 
Regex.Match("The Hunt for Red October", "^Red October$"); // fail 
23

आम तौर पर, और डिफ़ॉल्ट सेटिंग के साथ, ^ और $ एंकर के एक अच्छा तरीका है यह सुनिश्चित करना कि एक रेगेक्स एक संपूर्ण स्ट्रिंग से मेल खाता है।

कुछ चेतावनियां, हालांकि:

आप अपने regex में प्रत्यावर्तन है, तो ^ और $ साथ इसके आसपास से पहले एक गैर पर कब्जा समूह में अपने रेगुलर एक्सप्रेशन से संलग्न करना न भूलें:

^foo|bar$ 

है जाहिर है

^(?:foo|bar)$ 

इसके अलावा, ^ और $ डिब्बे से अलग स्ट्रिंग के प्रारंभ/समाप्ति के बजाय लाइन का प्रारंभ/अंत लें (यदि कुछ विकल्प सेट हैं। नियमित रूप से अभिव्यक्तियों का समर्थन करने वाले पाठ संपादकों में, यह आमतौर पर डिफ़ॉल्ट व्यवहार होता है। कुछ भाषाओं में, विशेष रूप से रूबी, इस व्यवहार को भी बंद नहीं किया जा सकता है। स्ट्रिंग के शुरू में

\A मैचों:

इसलिए एंकर कि पूरी स्ट्रिंग की शुरुआत/अंत में ही मैच की गारंटी है का एक और सेट है।

\Z स्ट्रिंग के अंत में या अंतिम लाइन ब्रेक से पहले मैच।

\z स्ट्रिंग के बहुत अंत में मैच।

लेकिन सभी भाषाएं इन एंकरों, विशेष रूप से जावास्क्रिप्ट का समर्थन नहीं करती हैं।

+2

यह सबसे उपयोगी उत्तर है –

2

मुझे पता है कि यह इस जवाब देने के लिए एक छोटी सी देर हो सकती है, लेकिन शायद यह किसी और के लिए काम आ जाएगा।

सबसे आसान तरीका:

var someString = "..."; 
var someRegex = "..."; 
var match = Regex.Match(someString , someRegex); 
if(match.Success && match.Value.Length == someString.Length){ 
    //pass 
} else { 
    //fail 
} 
0

पूरी स्ट्रिंग मिलान ^ साथ किया जा सकता है और $ के रूप में पिछले जवाब में कहा।

regex केस संवेदी बनाने के लिए, आप एक हैक कि चरित्र वर्गों शामिल लागू कर सकते हैं। चरित्र वर्गों के लॉट

^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$ 
-1

आप इसे इस उदाहरण की तरह कर सकते हैं अगर मैं केवल एक बार पत्र शून्य से एक एक स्ट्रिंग में पकड़ने के लिए चाहते हैं और यह myRegex.IsMatch() के साथ जांच की जा सकती है

^[^ ई] [ई] {1} [^ ई] $

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