2008-08-07 17 views
10

मैं मुख्य रूप से जावा डेस्कटॉप अनुप्रयोग Oracle डेटाबेस तक पहुँचने में 5 साल के लिए काम किया है और मैं नियमित अभिव्यक्ति इस्तेमाल नहीं किया है। अब मैं स्टैक ओवरफ़्लो दर्ज करता हूं और मुझे उनके बारे में बहुत सारे प्रश्न दिखाई देते हैं; मुझे लगता है कि मुझे कुछ याद आया।अच्छे नियमित अभिव्यक्ति क्या हैं?

क्या के लिए आप रेगुलर एक्सप्रेशन का उपयोग करते हैं?

पीएस क्षमा करें मेरे खराब अंग्रेजी

+0

javaadut.regex.Pterntern के लिए जावाडॉक्स को पढ़ने के लिए मत भूलना। यह एक अच्छा संदर्भ है। इसके अलावा http://perldoc.perl.org/perlre.html –

उत्तर

7

रूबी में एक उदाहरण पर विचार करें:

puts "Matched!" unless /\d{3}-\d{4}/.match("555-1234").nil? 
puts "Didn't match!" if /\d{3}-\d{4}/.match("Not phone number").nil? 

"/ \ डी {3} - \ डी {4}/"नियमित अभिव्यक्ति है, और जैसा कि आप देख सकते हैं कि यह एक बहुत सह है एक स्ट्रिंग में एक मैच खोजने का ncise तरीका।

इसके अलावा, समूहों का उपयोग आप जानकारी निकाल सकता है, जैसे:

match = /([^@]*)@(.*)/.match("[email protected]") 
name = match[1] 
domain = match[2] 

यहाँ, नियमित अभिव्यक्ति में कोष्ठक एक कैप्चरिंग समूह चिह्नित करते हैं, तो आप वास्तव में देख सकते हैं कि कौन सा डेटा है कि आप का मिलान नहीं हुआ है, इसलिए आप आगे प्रसंस्करण कर सकते हैं।

यह सिर्फ हिमशैल की नोक है ...एक नियमित अभिव्यक्ति में आप कई अलग-अलग चीजें कर सकते हैं जो प्रोसेसिंग टेक्स्ट को वास्तव में आसान बनाता है।

0

एक नियमित अभिव्यक्ति (लघु के लिए regex या regexp) एक खोज पैटर्न का वर्णन करने के लिए एक विशेष पाठ स्ट्रिंग है। आप स्टेरॉयड पर वाइल्डकार्ड के रूप में नियमित अभिव्यक्तियों के बारे में सोच सकते हैं। आप शायद वाइल्डकार्ड अंकन ऐसे *.txt के रूप में एक फ़ाइल प्रबंधक में सभी पाठ फ़ाइलों को खोजने के लिए से परिचित हैं। रेगेक्स समतुल्य .*\.txt$ है।

नियमित अभिव्यक्ति के लिए एक महान संसाधन: http://www.regular-expressions.info

7

रेगुलर एक्सप्रेशन (या रेगेक्स) तार में पैटर्न मैच के लिए उपयोग किया जाता है। इस प्रकार आप पाठ के एक टुकड़े से सभी ईमेल पते निकाल सकते हैं क्योंकि यह एक विशिष्ट पैटर्न का पालन करता है।

कुछ मामलों नियमित अभिव्यक्ति आगे स्लैश में बंद होते हैं और दूसरे स्लैश के बाद इस तरह के मामले-असंवेदनशीलता के रूप में विकल्प रखा जाता है। यहां एक अच्छा है :)

/(bb|[^b]{2})/i 

स्पोकन यह "2 होना या नहीं 2" पढ़ सकता है।

पहले भाग (कोष्ठक) हैं, वे पाइप के आधार पर विभाजित कर रहे हैं | चरित्र जो एक या कथन के बराबर है (ए | बी) "ए" या "बी" से मेल खाता है। पाइप क्षेत्र का पहला भाग "बीबी" से मेल खाता है। दूसरे आधे का नाम मुझे नहीं पता लेकिन यह स्क्वायर ब्रैकेट्स है, वे "बी" से मेल खाते हैं, यही कारण है कि वहाँ एक छत प्रतीक चीज़ (तकनीकी शब्द) है। Squiggly ब्रैकेट उनके सामने चीजों की एक गिनती से मेल खाते हैं, इस मामले में दो अक्षर जो "बी" नहीं हैं।

दूसरे के बाद/एक "मैं" जो यह केस संवेदी बना देता है। प्रारंभ और अंत स्लेश का उपयोग पर्यावरण विशिष्ट है, कभी-कभी आप करते हैं और कभी-कभी आप नहीं करते हैं।

दो लिंक मुझे लगता है कि आप इस के लिए काम कर रहे हैं मिलेगा

  1. regular-expressions.info
  2. Wikipedia - Regular expression
+0

यह एक अच्छा वर्णन है, लेकिन माइक का असली दुनिया उदाहरण पनिंग '2 बी' के लिए बेहतर है। दोनों को गठबंधन करना अच्छा लगेगा। –

+0

'2' के संबंध में 'squiggly' ब्रैकेट सामान्य नहीं है, वे' घुंघराले 'हैं .. – Timo

0

तुम सिर्फ नियमित अभिव्यक्ति के साथ बाहर शुरू कर रहे हैं, मैं दिल से Regex कोच की तरह एक उपकरण की सिफारिश:

http://www.weitz.de/regex-coach/

भी RegexBuddy के बारे में अच्छी बातें सुनी:

http://www.regexbuddy.com/

0

जैसा कि आप जानते हैं, ओरेकल में अब नियमित अभिव्यक्तियां हैं: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html। मैंने कुछ प्रश्नों में नई कार्यक्षमता का उपयोग किया है, लेकिन यह अन्य संदर्भों के रूप में उपयोगी नहीं है। मेरा मानना ​​है कि, यह है कि नियमित अभिव्यक्तियां संरचित डेटा के भीतर दफन किए गए संरचित डेटा को खोजने के लिए सबसे उपयुक्त हैं।

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

2

यदि आप नियमित अभिव्यक्तियों के बारे में जानना चाहते हैं, तो मैं Mastering Regular Expressions की अनुशंसा करता हूं। यह बहुत बुनियादी अवधारणाओं से सभी तरह से जाता है, इस बारे में बात करने के लिए कि विभिन्न इंजन नीचे कैसे काम करते हैं। अंतिम 4 अध्याय भी प्रत्येक PHP, .Net, Perl, और Java को समर्पित अध्याय देता है। मैंने इससे बहुत कुछ सीखा, और अभी भी इसे संदर्भ के रूप में उपयोग करें।

6

कूलेस्ट नियमित अभिव्यक्ति कभी:

/^1?$|^(11+?)\1+$/ 

यह परीक्षण करता है, तो एक नंबर प्रधानमंत्री है। और यह काम करता है !!

एनबी .: इसे काम करने के लिए, सेट-अप की एक बिट की आवश्यकता है; संख्या हम परीक्षण करना चाहते हैं "1" की एक स्ट्रिंग में परिवर्तित हो गया है पहले, तो हम अगर स्ट्रिंग करता नहीं "1" s का एक प्रमुख संख्या शामिल परीक्षण करने के लिए अभिव्यक्ति लागू कर सकते हैं:

def is_prime(n) 
    str = "1" * n 
    return str !~ /^1?$|^(11+?)\1+$/ 
end 

Avinash Meetoo’s blog पर एक अलग और बहुत ही पहुंच योग्य स्पष्टीकरण है।

+2

यह चालाक है, लेकिन शुरुआत के लिए शायद ही उचित है! :) –

+0

यह काम नहीं प्रतीत होता है ... या मुझे कुछ याद आ रहा है। – Copas

+0

@ कोपास: यह बिल्कुल काम करता है। क्या आपने पढ़ा है कि मैंने किस प्रकार और स्पष्टीकरण को जोड़ा है? –

0

ये आरई के दृश्य स्टूडियो और सी के लिए विशिष्ट हैं ++ लेकिन मैं समय पर उन्हें उपयोगी पाया गया है:

गैर-डिफ़ॉल्ट पैरामीटर के साथ "routineName" की सभी घटनाओं का पता लगाएं पारित कर दिया:

routineName \ (: एक + \)

इसके विपरीत

केवल चूक के साथ "routineName" की सभी घटनाओं को खोजने के लिए: routineName \ (\)

डीबग निर्माण में कोड सक्षम (या अक्षम) ढूंढने के लिए:

\ #if। _DEBUG *

ध्यान दें कि यह सभी प्रकारों को पकड़ लेगा: ifdef, अगर परिभाषित किया गया है, ifndef, अगर!परिभाषित

0

मजबूत पासवर्ड मान्य कर:

यह एक कम से कम एक अपर केस, एक छोटे अक्षर और एक अंक के साथ 5 से 10 अक्षरांकीय अक्षर की लंबाई के साथ एक पासवर्ड को मान्य होगा,:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$ 
संबंधित मुद्दे