2011-09-11 11 views
24

ऐसा लगता है कि यह छोटा होना चाहिए, लेकिन मैं नियमित अभिव्यक्तियों के साथ इतना अच्छा नहीं हूं, और यह Google के लिए आसान प्रतीत नहीं होता है।रेगेक्स मिलान शुरू और अंत तार

मुझे एक रेगेक्स चाहिए जो स्ट्रिंग 'डीबीओ' से शुरू होता है। और स्ट्रिंग '_fn'

जहां तक ​​मेरा संबंध है, मुझे कोई परवाह नहीं है कि इन दो तारों के बीच वर्ण क्या हैं, जब तक कि शुरुआत और अंत सही हो।

यह SQL सर्वर डेटाबेस में फ़ंक्शंस से मेल खाता है।

उदाहरण के लिए:

dbo.functionName_fn - Match 

dbo._fn_functionName - No Match 

dbo.functionName_fn_blah - No Match 

उत्तर

21

यदि आप बड़े टेक्स्ट के भीतर हिट खोज रहे हैं, तो आप ^ और $ का उपयोग नहीं करना चाहते हैं क्योंकि कुछ अन्य उत्तरदाताओं ने कहा है; वे पाठ की शुरुआत और अंत से मेल खाते हैं। ऐसा करें:

\bdbo\.\w+_fn\b 

\b एक word boundary है: यह एक ऐसी स्थिति है कि या तो एक शब्द चरित्र से पहले और एक के बाद नहीं है, या इसके बाद एक शब्द चरित्र द्वारा और एक से पहले नहीं मेल खाता है।

foodbo.functionName_fnbar 

\w+ मैचों में एक या अधिक "शब्द वर्ण" (पत्र:

dbo.functionName_fn 
foo dbo.functionName_fn bar 
(dbo.functionName_fn) 

... लेकिन नहीं इस एक में: इस regex क्या आप इन तार में से किसी में देख रहे हैं मिलेगा , अंक, या _)। यदि आपको कुछ और समावेशी की आवश्यकता है, तो आप \S+ (एक या अधिक गैर-व्हाइटस्पेस वर्ण) या .+? (लाइनफ़ीड्स को छोड़कर किसी भी वर्ण के एक या अधिक, गैर-लालची) का प्रयास कर सकते हैं। गैर लालची +? इसे dbo.func1_fn dbo.func2_fn जैसे गलती से मेल खाने से रोकता है जैसे कि यह केवल एक हिट था।

+0

मेरे पास एक प्रश्न है जो मुझे नहीं पता कि आप इसे जानते हैं या नहीं। फ्लेक्स \ बी में समर्थित नहीं है। क्या आपके पास फ्लेक्स में \ b लागू करने के लिए कोई विचार है? – Linda

12
^dbo\..*_fn$ 

यह आपको काम करना चाहिए।

+3

FYI करें:^एक स्ट्रिंग की शुरुआत का मतलब है, $ एक स्ट्रिंग के अंत का मतलब है। –

+0

@ डैनियल ए व्हाइट क्या \ .. * के लिए उपयोग किया जाता है? – eawedat

+2

@eawedat, '\ .' डॉट के लिए है,'। * 'किसी भी वर्ण के असंबद्ध अनुक्रम के लिए है। –

6

ठीक है, सरल regex यह है:

/^dbo\..*_fn$/ 

यह बेहतर होगा, हालांकि, जो भी प्रोग्रामिंग भाषा आप पहले चार बंद काट करने के लिए प्रयोग कर रहे हैं की स्ट्रिंग परिवर्तन कार्यक्षमता और पिछले तीन उपयोग करने के लिए स्ट्रिंग के पात्र और जांचें कि वे क्या चाहते हैं।

+0

से बचें स्ट्रिंग मैनिपुलेशन पर सहमति हुई। हालांकि, मैं इसे कोडस्मिथ जनरेटर में उपयोग कर रहा हूं, और स्रोत तक पहुंच नहीं है। हालांकि धन्यवाद! –

+0

@onesomeday \ .. * के लिए क्या उपयोग किया जाता है? – eawedat

+0

@eawedat इसका मतलब शाब्दिक है। चरित्र के बाद किसी भी अन्य पात्रों के 0 या अधिक के बाद। – lonesomeday

0
\bdbo\..*fn 

मैं एक विशिष्ट पुस्तकालय के लिए जावा कोड के लिए ढेर के माध्यम से देख रहा था: car.csclh.server.isr.businesslogic.TypePlatform (हालांकि मैं सिर्फ समय में car और Platform जानते थे)। दुर्भाग्यवश, यहां मेरे किसी अन्य सुझाव ने मेरे लिए काम नहीं किया, इसलिए मुझे लगा कि मैं इसे पोस्ट करूंगा।

यहाँ regex मैं इसे खोजने के लिए प्रयोग किया जाता है:

\bcar\..*Platform 
संबंधित मुद्दे