2009-09-11 5 views
211

क्या एक रेगेक्स को परिभाषित करना संभव है जो किसी निश्चित परिभाषित चरित्र या वर्णों के सेट को छोड़कर प्रत्येक चरित्र से मेल खाएगा?कॉमा ',' या अर्ध-कॉलन 'को छोड़कर प्रत्येक चरित्र से कौन सा रेगेक्स मेल करेगा;'?

असल में, मैं या तो अल्पविराम (,) या सेमी-कॉलन (;) द्वारा एक स्ट्रिंग को विभाजित करना चाहता था। तो मैं इसे रेगेक्स के साथ करने की सोच रहा था जो तब तक सबकुछ से मेल खाएगा जब तक कि इसे अल्पविराम या सेमी-कोलन का सामना न हो जाए।

उत्तर

291
[^,;]+   

आपने उपयोग किए गए रेगेक्स कार्यान्वयन को निर्दिष्ट नहीं किया है। उनमें से अधिकतर Split विधि है जो delimiters लेता है और उनके द्वारा विभाजित होता है।

[,;]+ 
+6

और सवाल है, निर्दिष्ट नहीं करता आसन्न विभाजक अनुमति है या नहीं तो अनुगामी '+' थोड़ा संदिग्ध है। –

+0

केवल अर्धविराम के लिए एक त्रुटि प्राप्त करना - अनियंत्रित regexp फ़ाइल – Jaswinder

54

उपयोग चरित्र वर्गों: आप का उपयोग करने के एक "सामान्य" (^ के बिना) चरित्र वर्ग के साथ है कि एक चाहते हो सकता है। देखभाल के साथ शुरू होने वाली एक चरित्र कक्षा कक्षा में कुछ भी नहीं मिलती है।

[^,;] 
+1

फ़ाइल के अंत से मिलता है [नकारात्मक चरित्र वर्ग] (http://www.regular-expressions.info/charclass.html) – HEX

2

इस का उपयोग करें:

([^,;]*[,;])* 
+4

इसके लिए कॉमा या अर्ध-कॉलन की आवश्यकता होती है फ़ील्ड विभाजक के बजाए एक फ़ील्ड डिलीमीटर। अंतर 'लाइन' (या अन्य स्कैन किए गए रिकॉर्ड संरचना) के अंत में मायने रखता है; आम तौर पर, आप अंतिम क्षेत्र के बाद अल्पविराम या सेमी-कोलन पर जोर देना नहीं चाहते हैं। यदि आपका रेगेक्स इंजन पर्याप्त शक्तिशाली है, तो आप ''(?: ([^ ,;] *) (?: [^ ,;] | $))' '(गैर-कैप्चरिंग कोष्ठक वाले पीसीआरई) का उपयोग कर सकते हैं। क्षेत्र के बाद अल्पविराम या सेमी-कोलन के विकल्प, या रिकॉर्ड के अंत, चीजों को बेहतर काम करता है। यह भी विचार करें कि खाली फ़ील्ड की अनुमति है या नहीं। –

+1

अंत में, आपको कैप्चर द्वारा वास्तव में वापस लौटने के बारे में चिंता करने की ज़रूरत है - क्या आप वास्तव में विभाजक शामिल करना चाहते थे, और यदि लाइन पर 10 फ़ील्ड हैं, तो उनमें से कितने कैप्चर नोटेशन द्वारा लौटाए जाते हैं। –

+1

आप सभी के बारे में सही हैं, लेकिन कारण मैंने उन चीज़ों को मेरे उत्तर में नहीं समझा है कि मुझे नहीं पता कि रेगेक्स की कौन सी भाषा/लाइब्रेरी पूछताछ कर रही है। वह "जीआरईपी" का उपयोग कर सकता है। वैसे भी, मैं उन चीजों को जोड़ने के लिए उन टिप्पणियों को जोड़ने की सराहना करता हूं। : डी – NawaMan

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