/ / रेगेक्स मैच के शुरुआती बिंदु को रोकें - सी #, रेगेक्स

रेगेक्स मैच के शुरुआती बिंदु को रोकें - सी #, रेगेक्स

मैं एक लंबी स्ट्रिंग को पार्स कर रहा हूं और पार्सिंग के हिस्से के लिए नियमित अभिव्यक्ति का उपयोग करना चाहता हूं।

सादगी के लिए, मान लें कि मेरा रेगेक्स है <[a-z]*> और जब मैं पहली बार जाता हूं तो मैं इसे चलाने के लिए पसंद करता हूं <.

public int FindEnd(string longStr, int index) {
// longStr[index] == "<"

var match = regex.Match(longStr, index);
if (!match.Success || match.Index != index) {
throw new Exception("Mismatch");
} else {
return index + match.Length;
}
}

मैं किसी भी तरह से regex को बाधित करना चाहता हूं ताकि यह पूरी स्ट्रिंग पर नहीं जा सके, लेकिन केवल शुरुआती बिंदु पर तारों की तलाश में है - क्या यह संभव है? मैंने कोशिश की ^<[a-z]*> लेकिन यह काम नहीं करता - यह कुछ भी स्वीकार नहीं करेगा (अगर छोड़कर index स्ट्रिंग की शुरुआत के लिए अंक)।

नोट: मैं "एम नहीं की कोशिश कर रहा है एक regex के साथ एचटीएमएल पार्स.

उत्तर:

जवाब के लिए 2 № 1

मुझे लगता है कि आप "तलाश रहे हैं G<[a-z]*>


जवाब के लिए 0 № 2

यह एक दयालु Regex.Match (स्ट्रिंग, Int32) इंडेक्स का इलाज "^" के रूप में नहीं करता है।

इस तरह से कुछ के साथ kludging के बारे में क्या:

पुनः = नया Regex ("^। {" + index.ToString () + "} <[ए-जेड] *>");

... कहने के लिए, रेगेक्स के भीतर मैच की शुरुआत की ऑफसेट को बाधित करें।

अद्यतन: ओह। कोई बात नहीं। "जी" के एमएसडीएन का वर्णन "पिछले मैच" का उल्लेख करता है, लेकिन यह ऊपर वर्णित अनुसार ठीक तरह से काम करता है। मेरा से बेहतर समाधान।