c#
  • .net
  • regex
  • 2011-02-03 18 views 28 likes 
    28

    के लिए RegEx मैं इस स्रोत कोड के साथ wan_ip के मान (आईपी पता) निकालने का प्रयास करता हूं: क्या गलत है ?! मुझे यकीन है कि RegEx पैटर्न सही है।एक आईपी पता

    String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)"; 
    Regex ip = new Regex(@"[\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"); 
    string[] result = ip.Split(input); 
    
    foreach (string bla in result) 
    { 
        Console.WriteLine(bla);     
    } 
    
    Console.Read(); 
    
    +4

    एक तरफ अभिव्यक्ति, क्या आप 'स्प्लिट' की बजाय 'Regex.Matchches' नहीं देख रहे हैं? – Ani

    +0

    संभावित डुप्लिकेट [मेजबाननाम या आईपी पते से मेल खाने के लिए नियमित अभिव्यक्ति?] (Http://stackoverflow.com/questions/106179/regular-expression-to-match-hostname-or-ip-address) –

    +6

    '999.999.999.999' ? – Andrey

    उत्तर

    32

    [ आपके पैटर्न की शुरुआत में नहीं होना चाहिए। इसके अलावा, आप शायद Matches(...) का उपयोग करना चाहते हैं।

    प्रयास करें:

    String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)"; 
    Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"); 
    MatchCollection result = ip.Matches(input); 
    Console.WriteLine(result[0]); 
    
    +1

    @ h0scHberT, अगर @ जॉन का सुझाव काम करता है, तो मैं इसके लिए जाऊंगा। यदि नहीं, तो @ SwDevMan81 के कोड को आज़माएं: यह जांचने के लिए सुरक्षित लगता है कि कोई मैच है या नहीं। मेरा (त्वरित) सुझाव शायद कोई त्रुटि नहीं होने पर त्रुटियों का उत्पादन करेगा (मैं सी # नौसिखिया का थोड़ा सा हूं ...)। –

    +0

    धन्यवाद! यह काम करता हैं! – h0scHberT

    +0

    यदि आईपी 1 9 2.168.1.15_1 – Jay

    0

    मैं आप [छुटकारा पाने के लिए की जरूरत है - कि एक आवारा चरित्र या क्या है?

    Regex (@ "[ \ b \ घ {1,3}। \ घ {1,3}। \ घ {1,3}। \ घ {1,3} \ ख")

    0

    आपके रेगेक्स पैटर्न की शुरुआत में आपको एक बाहरी [ दिखाई देता है।

    13

    इस प्रयास करें:

    Match match = Regex.Match(input, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"); 
    if (match.Success) 
    { 
        Console.WriteLine(match.Value); 
    } 
    
    +0

    यह मामला 1 9 2.168.1.15_1 को संभाला जा रहा है .. +1 – Jay

    +2

    192.168.1.15_1? इसे क्यों विचार करने की आवश्यकता है? –

    5

    क्या तुमने कभी अपने आप को, एक विशेष नियमित अभिव्यक्ति की तलाश में http://regexlib.com/ पुस्तकालय प्रारूप में रेगुलर एक्सप्रेशन से के के बहुत सारे है पाते हैं।

    3
    Regex.IsMatch(input, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$") 
    
    +8

    एक ऐसे समाधान से पूछा गया था जो काम नहीं करता है, उसके बाद एक साल से अधिक पहले से ही उत्तर दिए गए प्रश्न का उत्तर क्यों दिया जाएगा? प्रश्न एक सबस्ट्रिंग निकालने के बारे में था - आपका समाधान केवल एक सटीक स्ट्रिंग से मेल खाता है, और पिछले उत्तरों के लिए बिल्कुल _nothing_ जोड़ता है। –

    +0

    बिल्कुल वही जो मैं खोज रहा था। धन्यवाद! – Boris

    24

    बहुत पुराने पोस्ट, आप स्वीकार कर लिया समाधान का उपयोग करना चाहिए, लेकिन एक IPv4 पता के लिए सही रेगुलर एक्सप्रेशन से उपयोग करने पर विचार:

    ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 
    

    आप विशेष caracters से बचने के लिए के बाद या Beforeyou का उपयोग कर सकते हैं:

    ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ 
    
    +3

    यह स्वीकार्य समाधान होना चाहिए –

    +0

    अच्छा लगता है, लेकिन जब मैं इसका उपयोग करता हूं, तो यह भी मेल खाता है यदि मैं वैध आईपी – copa017

    +1

    पर अमान्य वर्ण जोड़ता हूं तो आप रेगेक्स समर्थन उपसर्ग और प्रत्यय सही हैं, मैं अपना उत्तर संपादित करता हूं। – JPBlanc

    2

    /b प्रयोग करने से बचें - यह पहले या आईपी
    उदाहरण ...198.192.168.12... के लिए था के बाद पात्रों की अनुमति देता है वैध।

    ^ और $ का उपयोग करें, यदि आप आईपी पते को अलग करने वाले हिस्सों में इनपुट को विभाजित कर सकते हैं। के रूप में 172. .254.1 ने बताया सच था ऊपर

     Regex regexIP = new Regex(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"); 
    
        if (regexIP.Match(textBoxIP.Text).Success){ 
         String myIP = textBoxIP.Text; 
        } 
    

    नोट अंक मान्य नहीं होगा। यह केवल सही स्वरूपण की जांच करता है।


    अद्यतन: स्वरूपण को मान्य है और आप इस्तेमाल कर सकते हैं मूल्यों के

     Regex regexIP = new Regex(@"^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$"); 
    
        if (regexIP.Match(textBoxIP.Text).Success){ 
         String myIP = textBoxIP.Text; 
        } 
    

    (नोट प्रत्येक संख्यात्मक मान के लिए ([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]) का प्रयोग करके)
    क्रेडिट: https://stackoverflow.com/a/10682785/4480932

    +0

    यह 172 के लिए सच है।316.254.1 –

    +1

    इंगित करने के लिए धन्यवाद कि कार्ल 9 1 - मैंने इसके लिए मेरा जवाब अपडेट कर दिया है। – Cordell

    2

    मैं इस पोस्ट प्रतिसाद नहीं पता है ' टी नया, लेकिन, मैंने कई प्रस्तावित समाधानों की कोशिश की है और उनमें से कोई भी काफी काम नहीं करता है और साथ ही मुझे जस्टिन जोन्स द्वारा प्रदान किए गए लिंक के लिए धन्यवाद मिला। उनके पास आईपी एड्रेस के लिए बहुत कुछ है लेकिन यह सूची का शीर्ष है और लिंककैड (मैं लव लिंकपैड) का उपयोग कर रहा हूं। मैंने जो परीक्षण किया है, वह बहुत अच्छी तरह से काम करता है।मैं नहीं बल्कि पिछले प्रदान की भाव में से किसी की तुलना में यह एक का उपयोग करने की सलाह देते:

    ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ 
    

    दें कि निम्नलिखित के साथ LINQPad में एक शॉट:

    // \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 355.168.0.1 = 355.168.0.1 (Not Correct) 
    // ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 355.168.0.1 = 55.168.0.1 (Not correct) 
    // \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 355.168.0.1 = 355.168.0.1 (Not Correct) 
    // ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ 355.168.0.1 = 355.168.0.1 (Not Correct) 
    // ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 355.168.0.1 = 355.168.0.1 (Not Correct) 
    // ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ 355.168.0.1 = No Match (Correct) 
    
    Match match = Regex.Match("355.168.0.1", @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"); 
    if (match.Success) { 
        Console.WriteLine(match.Value); 
    } 
    else { 
        Console.WriteLine("No match."); 
    } 
    
    नई रेगुलर एक्सप्रेशन से इस मान्य नहीं है जो सही है के साथ

    : 355.168.0.1 = कोई मिलान जो टिप्पणियों में उल्लेख के अनुसार सही है।

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

    अद्यतन: मैंने आईपी पते की एक सूची के साथ इस अभिव्यक्ति का एक उदाहरण उदाहरण प्रदान करने के लिए एक .NET Fiddle प्रोजेक्ट बनाया है जो विभिन्न मानों का परीक्षण करता है। इसके साथ टिंकर करने के लिए स्वतंत्र महसूस करें और इस अभिव्यक्ति का प्रयोग करने के लिए विभिन्न मानों को आजमाएं और अगर आपको कोई ऐसा मामला मिल जाए जहां अभिव्यक्ति विफल हो जाती है तो कोई इनपुट प्रदान करें। https://dotnetfiddle.net/JoBXdI

    अद्यतन 2: बेहतर अभी तक इस पोस्ट का संदर्भ लें: Another related question.

    धन्यवाद और मुझे उम्मीद है कि इस मदद करता है!

    +0

    यह "0.254.255.0" –

    0

    रेगेक्स (@ "\ ए \ डी {1,3}। \ D {1,3}। \ D {1,3}। \ D {1,3} \ z") इस

    के साथ प्रयास करें
    +0

    के लिए झूठा रिटर्न देता है यह ठीक से काम नहीं करता है, ऊपर दिए गए .NET fiddle के लिए मेरा लिंक देखें, मैंने इस अभिव्यक्ति को परीक्षणों की सूची में जोड़ा है। –

    0

    मैंने इस पैटर्न को UrlAttribute.cs से लिया है। DataAnnotations नामस्थान पर। जैसा कि आप देख सकते हैं, मैंने स्रोत से मूल पैटर्न का केवल एक टुकड़ा लिया।

    Regex.IsMatch(input, @"^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1- 
    9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1- 
    9]\d|1\d\d|2[0-4]\d|25[0-5])$"); 
    
    +0

    कृपया इसे समझाएं, ताकि यह उन लोगों के लिए मूल्य प्रदान करे जो वास्तव में इस प्रश्न की खोज करेंगे। उन लोगों के लिए जो स्पष्टीकरण के बिना आपके कोड को समझते हैं, समाधान पहले से ही स्पष्ट होगा। – jpaugh

    +0

    यह मेरी .NET Fiddle प्रोजेक्ट का उपयोग करके प्रति परीक्षण सही ढंग से काम करता है। 100% निश्चित नहीं है कि इस और मेरी अभिव्यक्ति के बीच बड़े अंतर क्या हैं। –

    0
    (\d{1,3}\.){3}(\d{1,3})[^\d\.] 
    

    चेक इस। यह पूरी तरह से काम करना चाहिए

    +0

    क्षमा करें, यह काम नहीं करता है। मेरे उत्तर में जुड़े मेरे .NET Fiddle प्रोजेक्ट की जांच करें - मैंने इस अभिव्यक्ति को सूची में जोड़ा है। आप मेरी टिप्पणी कर सकते हैं, अपनी टिप्पणी नहीं कर सकते हैं और ध्यान दें कि यह अपेक्षित काम नहीं करता है। –

    संबंधित मुद्दे