2009-08-26 2 views
15

के माध्यम से शब्दों का एक सेट नकारात्मक करना मैं जावा रेगेक्स का उपयोग करके शब्दों के एक सेट को अस्वीकार करना चाहता हूं।जावा रेगेक्स

कहें, मैं cvs, svn, nvs, mvc को अस्वीकार करना चाहता हूं। मैंने एक रेगेक्स लिखा जो ^[(svn|cvs|nvs|mvc)] है।

कुछ ऐसा लगता है कि यह काम नहीं कर रहा है।

+1

संभावित डुप्लिकेट: http://stackoverflow.com/questions/42990/regex-to-match-against-something-that-is-not-a-specific-substring – finnw

+2

यह भी देखें: http://stackoverflow.com/questions/406230/regular-expression-to-match-string-not-containing-a-word – finnw

+1

... और http://stackoverflow.com/questions/717644/ नियमित-अभिव्यक्ति-वह-नहीं-युक्त-निश्चित-स्ट्रिंग – finnw

उत्तर

4

यह इतना आसान नहीं है। यदि आप किसी शब्द को अस्वीकार करना चाहते हैं तो आपको इसे पत्रों में विभाजित करना होगा और प्रत्येक पत्र को अस्वीकार करना होगा।

तो नकारना को

/svn/ 

आप

/[^s][^v][^n]/ 

लिखने के लिए तो क्या आप को फिल्टर करने की वास्तव में बदसूरत regex में बदल जाएगा चाहते हैं और मुझे लगता है कि इस regex का उपयोग करने के लिए बेहतर विचार है

/svn|cvs|nvs|mvc/ 

और जब आप इसके खिलाफ अपनी स्ट्रिंग का परीक्षण करते हैं, तो परिणाम को नकार दें।

जे एस में यह अधिक कम है कि ऐसा दिखाई देगा:

!/svn|cvs|nvs|mvc/.test("this is your test string"); 
+0

जो शायद सही नहीं है, क्योंकि आप शुरुआत^और स्ट्रिंग – pvoosten

+0

के अंत $ से मेल नहीं खाते हैं, ठीक है, मैं परीक्षण स्ट्रिंग में किसी भी स्थिति पर किसी भी शब्द की खोज कर रहा हूं। यदि आप केवल पूरे शब्दों से मेल खाना चाहते हैं तो^शुरुआत में और अंत में $ चाल चलेंगे। – RaYell

2

आपका रेगुलर एक्सप्रेशन से गलत है। स्क्वायर ब्रैकेट के बीच, आप पात्रों को आवश्यकता या अनदेखा कर सकते हैं। अगर आपको ^(svn|cvs|nvs|mvc)$ नहीं मिला है, तो आप ठीक हैं।

+0

जो वास्तव में सहायक नहीं है क्योंकि यह पूरी तरह से regex नहीं है। अगर आपको कोड बदलने का विकल्प नहीं है, तो यह क्यूए मुद्दे को हल नहीं करेगा। – Alex