2012-04-18 3 views
13

हाय मैं रेगेक्स के साथ लगभग नया हूं ... इसलिए, शायद मेरी समस्या यह आसान है लेकिन मुझे कोई समाधान नहीं मिल रहा है!रेगेक्स - केवल एक स्पेस या मैच के बाद कुछ भी नहीं

मैं एक रेगेक्स पैटर्न लिख रहा हूं जो उपयोगकर्ता के लेखन में दिखता है और स्थापित किए गए मैचों के दूसरे रंग के साथ पेंट करता है। मैं, एक और रंग के साथ पेंट करने के लिए उपयोगकर्ता कुछ इस तरह लिखने अगर उदाहरण के लिए करना चाहते हैं:

foo() 

बात यह है है कि मैं नहीं पेंट करने के लिए है कि अगर उपयोगकर्ता उसके बाद कुछ और लिखते हैं, मैं अगर मतलब चाहते हैं उपयोगकर्ता लिखने केवल

"foo()" (or "foo() ") 

तो यह ठीक है, मैं इसे पेंट करने के लिए चाहते हैं, लेकिन उपयोगकर्ता अगर लिखने

"foo()d" 

मैं पेंट करने के लिए है कि क्योंकि अब अच्छी तरह से लिखा है नहीं करना चाहती मेरे लिए।

मैंने पहले से ही रेगेक्स पैटर्न लिखा है जो "foo()" (या बीच में एक बिंदु के साथ "foo.foo()") से मेल खाता है, लेकिन मुझे उस समस्या का सामना करना पड़ रहा है। मैं अपने पैटर्न है कि केवल एक अंतरिक्ष, या कुछ भी नहीं की अनुमति देने के लिए कुछ जोड़ने की जरूरत है (यदि उपयोगकर्ता लिखने के बाद कुछ और ")" मैं यह मैच के लिए नहीं करना चाहते हैं) यह मेरा पैटर्न है:।

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\) 

बहुत बहुत धन्यवाद!

+1

यह पूरी तरह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं। क्या इसके बाद कोई पात्र हैं? यदि नहीं, तो आप अपने regex को '\ s? $' के साथ समाप्त कर सकते हैं। –

+0

सही, यह काम नहीं करेगा क्योंकि मैं उपयोगकर्ता को लिखना जारी रखना चाहता हूं ... – gezequiel

उत्तर

12

डेविड ब्राबांट करीब है, लेकिन मुझे लगता है कि आप वास्तव में (?!\S) के साथ अपने नियमित अभिव्यक्ति समाप्त होने की कोशिश करना चाहते हैं - यह आप का मतलब होगा गैर-व्हाइटस्पेस चरित्र के बाद कुछ भी नहीं मिलेगा। यदि आप व्हाइटस्पेस की जगह रिक्त स्थान पर मिलान करना चाहते हैं, तो (?![^ ]) का उपयोग करें।

+0

चूंकि आप रेगेक्स के लिए नए हैं, तो आप^और $ प्रतीकों के बारे में भी नहीं जानते। वे लाइन एंकर हैं। उदाहरण के लिए, यदि आपका रेगेक्स "^ foo() []? $" यह "पूरी तरह से लाइन के लिए" foo() "और" foo() "से मेल खाता है। – Scen

+0

हाँ, मैं उन प्रतीकों के बारे में जानता हूं, लेकिन यह मेरे मामले में काम नहीं करेगा ... – gezequiel

0

[az] [az] (("[^" \ r \ n] "|? - [।]? [] \ B \ d + \ घ \ ख))।? [] ?

जोड़ना एक []? यह क्या करना चाहिए।? 1 या 0, [] केवल मैच अंतरिक्ष के लिए प्रयोग किया जाता है।

इसके अलावा, [\ s]? खाली स्थान के सभी प्रकार के काम करेगा (टैब शामिल ।)

+0

यह काम नहीं करेगा, जैसे कि अगला चरित्र सफेद स्थान नहीं है, यह शून्य बार स्थान से मेल खाता है। मुझे लगता है कि gezequiel विफल होना चाहता है अगर वह '\ S' से मेल खाता है, यानी एक गैर-सफेद जगह चरित्र। –

+0

आह धन्यवाद एडी, सवाल को और अधिक अच्छी तरह से पढ़ना चाहिए था। – Scen

0

यह आपको मेरी regex परीक्षक के अनुसार जो खोज रहे हैं करने के लिए लगता है:

आप के लिए regex में ऊपर

(\w+)(\.*)(\(\))+(\s)*(?!.) 

महत्वपूर्ण हिस्सा है:: 0

आप एक से अधिक स्थान के लिए अनुमति देना चाहते हैं, इस का उपयोग करें:

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]*)(?!.) 
4

उपयोग नकारात्मक देखो आगे (\ रों) *()

(\ रों) *:?!। 0 या अधिक सफेद रिक्त स्थान के बाद():?!। और कोई अन्य चरित्र

+0

यह बहुत अच्छा है! धन्यवाद! – gezequiel

+0

+1: अच्छा जवाब! अच्छी तरह से काम। –

+0

@gezequiel: मेरी पिछली टिप्पणी देखें। आपको एक छोटी सी चिड़चिड़ाहट है जो आपको करने की ज़रूरत है। –

0

क्या आप जोड़ने की कोशिश कर सकते हैं:

\ s *%?

\ s *: शून्य या अधिक रिक्त स्थान

% का अर्थ है: स्ट्रिंग के अंत

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