पर मिलान रेगेक्स मैं यह जांचना चाहता हूं कि एक निश्चित पैटर्न (उदाहरण के लिए एक डबल उद्धृत स्ट्रिंग) सटीक स्थिति पर मेल खाता है या नहीं।सटीक ऑफ़सेट
उदाहरण
string text = "aaabbb";
Regex regex = new Regex("b+");
// Now match regex at exactly char 3 (offset) of text
मैं अगर वास्तव में चार 3.
पर regex
मैचों मैं Regex.Match Method (String, Int32)
पर एक नज़र था जांच करना चाहते हैं, लेकिन यह व्यवहार न करे कि मैं उम्मीद।
public void RegexTest2()
{
Match m;
string text = "aaabbb";
int offset = 3;
m = new Regex("^a+").Match(text, 0); // lets do a sanity check first
Assert.AreEqual(true, m.Success);
Assert.AreEqual("aaa", m.Value); // works as expected
m = new Regex("^b+").Match(text, offset);
Assert.AreEqual(false, m.Success); // this is quite strange...
m = new Regex("^.{"+offset+"}(b+)").Match(text); // works, but is not very 'nice'
Assert.AreEqual(true, m.Success);
Assert.AreEqual("bbb", m.Groups[1].Value);
m = new Regex("^b+").Match(text.Substring(offset)); // works too, but
Assert.AreEqual(true, m.Success);
Assert.AreEqual("bbb", m.Value);
}
वास्तव में मुझे विश्वास है कि new Regex("^.", 1).Match(myString)
कुछ भी मेल खाते हैं कभी नहीं होगा शुरू कर:
तो मैं कुछ परीक्षण और कुछ समाधान किया।
कोई सुझाव?
संपादित करें:
मैं एक काम कर समाधान (वैकल्पिक हल) मिला है। तो मेरा सवाल गति और एक अच्छा कार्यान्वयन के बारे में सब कुछ है।
बहुत अच्छा विचार! –
मुझे 8 सेकंड तक मारो, मुझे पुष्टि करने के लिए बहुत लंबा लगा: 'पी'। '\ G' यहां सही है, लेकिन मैं उसी 'Regex' ऑब्जेक्ट का उपयोग करने के बारे में एक चेतावनी जोड़ूंगा, मान लीजिए कि ओपी हर बार एक नया निर्माण नहीं करेगा। मुझे पूरा यकीन नहीं है कि यह कैसे व्यवहार करेगा, लेकिन ऑफसेट के साथ भी यह अंतिम स्थिति याद रख सकता है। यह जांचने लायक है कि एक। (फिर से, मुझे यकीन नहीं है) – Kobi
@ कोबी - मुझे संदेह है कि यह मामला केवल तभी हो सकता है जब आप m.MatchNext() का उपयोग करते हैं, न कि यदि आप उसी Regex ऑब्जेक्ट पर फिर से मिलान() को कॉल करते हैं। – CAFxX