एक स्ट्रिंग के लिए नियमित अभिव्यक्ति जो एक अनुक्रम से शुरू नहीं होती है


197

मैं इस कार्यक्रम का उपयोग करते हुए तालिकाओं का एक गुच्छा संसाधित कर रहा हूं , लेकिन मुझे उन लोगों को अनदेखा करने की आवश्यकता है जो लेबल "tbd_" से शुरू होते हैं। अब तक मेरे पास [^ tbd_] जैसा कुछ है, लेकिन बस उन पात्रों से मेल नहीं खाता।


कैसे काम करता है SchemaSpy? क्या आप इसे तालिका के नामों की सूची से गुजार रहे हैं या आप इसे एक रेगेक्स पास कर रहे हैं और यह मिलान कर रहा है?
मार्क बीईके

मैं एक रेगेक्स (यह -i झंडा) पास कर रहा हूं और यह मैचों को आयात करेगा, या इसलिए यह किसी भी मामले में कहता है =)
echoblaze

4
@echoblaze: यदि आप XML संसाधित कर रहे हैं, तो आप XML पार्सर का उपयोग क्यों नहीं करते? यह नियमित अभिव्यक्ति का उपयोग करने की तुलना में बहुत आसान होगा।
Gumbo

जवाबों:


333

आप एक नकारात्मक रूप-दर्शन का उपयोग कर सकते हैं:

^(?!tbd_).+

या एक नकारात्मक नज़र के पीछे

(^.{1,3}$|^.{4}(?<!tbd_).*)

या सीधे सादे पुराने चरित्र सेट और विकल्प:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*

6
क्या यह किसी विशेष रेगेक्स इंजन के लिए प्रतिबंधित है?
मार्क बीएसी

1
मैं केवल इसलिए पूछता हूं क्योंकि वह दूसरा अभी भी मेरे परीक्षण में tbd_ से मेल खाता है। पहला महान हालांकि है।
मार्क बीएसी

5
नियमित रूप से अभिव्यक्ति.info के स्वाद की तुलना पर एक नज़र डालें: regular-expressions.info/refflavors.html
Gumbo

1
@ गुंबो - कि खत्म नहीं होना चाहिए। * के बजाय। + एक स्ट्रिंग जो tbd_ भी उसी के साथ शुरू होती है ... इसलिए परिभाषा द्वारा किसी अन्य वर्णों का पालन करने की आवश्यकता नहीं है? अन्यथा, अच्छा उदाहरण। यह करता है एक regex इंजन है कि समर्थन करता है, हालांकि lookaround आवश्यकता होती है।
बेनलाब्स्टर

1
@balabaster: मुझे नहीं लगता कि वह खाली तारों की तलाश में है। लेकिन अगर ऐसा है, वह आसानी से उस जगह से बदल सकते हैं .+द्वारा.*
Gumbo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.