अच्छे नियमित अभिव्यक्ति क्या हैं?

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

नियमित अभिव्यक्तियों का उपयोग करने के लिए आप क्या करते हैं?

अनुलेख मेरी खराब इंग्लिश के लिए माफ़ कीजिये

0
ro fr bn
Javaadut.regex.Pterntern के लिए javadocs पढ़ने के लिए मत भूलना। यह एक अच्छा संदर्भ है। इसके अलावा perldoc.perl.org/perlre.html
जोड़ा लेखक Adrian Pronk, स्रोत

9 उत्तर

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

A great resource for regular expressions: http://www.regular-expressions.info

0
जोड़ा

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

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?

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

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

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

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

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

0
जोड़ा

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

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

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

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

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

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

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

  1. नियमित-expressions.info
  2. विकिपीडिया - नियमित अभिव्यक्ति
0
जोड़ा
squiggly 2 के संबंध में ब्रैकेट सामान्य नहीं है, वे घुंघराले हैं ..
जोड़ा लेखक Timo, स्रोत
यह एक अच्छा वर्णन है, लेकिन माइक का असली दुनिया उदाहरण दंड '2 बी' के लिए बेहतर है। दोनों को गठबंधन करना अच्छा लगेगा।
जोड़ा लेखक Bobby Jack, स्रोत

यदि आप नियमित अभिव्यक्तियों के साथ शुरुआत कर रहे हैं, तो मैं दिल से सलाह देता हूं कि द रेगेक्स कोच:

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

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

http://www.regexbuddy.com/

0
जोड़ा

Validating strong passwords:

यह कम से कम एक ऊपरी केस, एक निचला मामला और एक अंक के साथ 5 से 10 अल्फान्यूमेरिकल वर्णों की लंबाई वाले पासवर्ड को मान्य करेगा:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
0
जोड़ा

सबसे अच्छी नियमित अभिव्यक्ति कभी :

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

यह जांचता है कि कोई संख्या प्रमुख है या नहीं। और यह काम करता है !!

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

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

अविनाश मिटू का ब्लॉग

0
जोड़ा
यह चालाक है, लेकिन शुरुआत के लिए शायद ही उचित है! :)
जोड़ा लेखक Bobby Jack, स्रोत
@ कोपास: यह बिल्कुल काम करता है। क्या आपने पढ़ा है कि कैसे और किस प्रकार से जुड़ा हुआ है?
जोड़ा लेखक Konrad Rudolph, स्रोत
ऐसा लगता है कि काम नहीं कर रहा है ... या मुझे कुछ याद आ रहा है।
जोड़ा लेखक Copas, स्रोत

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

0
जोड़ा

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

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

0
जोड़ा

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

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

routineName \ (: एक + \)

Conversely to find all occurrences of "routineName" with only defaults: routineName\(\)

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

\#if._DEBUG*

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

0
जोड़ा