Regexp के साथ IPv4 पतों को मान्य करना


94

मैं IPv4 सत्यापन के लिए एक कुशल रेगेक्स प्राप्त करने की कोशिश कर रहा हूं, लेकिन बहुत अधिक भाग्य के बिना। ऐसा लगता था कि मेरे पास एक बिंदु था (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}, लेकिन यह कुछ अजीब परिणाम पैदा करता है:

$ grep --version
grep (GNU grep) 2.7
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.1
192.168.1.1
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.255
192.168.1.255
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.255.255
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.2555
192.168.1.2555

मैंने यह देखने के लिए एक खोज की कि क्या यह पहले से ही पूछा और उत्तर दिया गया था, लेकिन अन्य उत्तर केवल यह दिखाने के लिए दिखाई देते हैं कि 1-3 संख्याओं के 4 समूहों को कैसे निर्धारित किया जाए, या मेरे लिए काम न करें।


13
यह मत भूलो कि ए, और एबी, और एबीसी आईपी पते के साथ ही एबीसीडी सीरियस रूप से मान्य हैं। कोशिश करो ping 2130706433और ping 127.1एक खीस के लिए।
dty

1
मेरा वैरिएंट ऑनलाइन regexr.com/39hqf
Sllouyssgort

जवाबों:


98

आपको पहले से ही काम करने का उत्तर मिल गया है, लेकिन अगर आप उत्सुक हैं कि आपके मूल दृष्टिकोण के साथ क्या गलत था, तो इसका उत्तर यह है कि आपको अपने विकल्प के आसपास कोष्ठक की आवश्यकता है अन्यथा (\.|$)केवल आवश्यक है यदि संख्या 200 से कम है।

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

26
यह चीजों को भी मान्य करता प्रतीत होता है जैसे192.168.1.1.1
cwd

2
क्या यह होना चाहिए \b((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:(?<!\.)\b|\.)){4}:; यानी इसलिए यह रेखा के अंत के बजाय एक शब्द सीमा के साथ समाप्त होता है? इसके अतिरिक्त, मैंने अवांछित उप-मैचों से बचने के लिए गैर-कैप्चरिंग समूहों को चिह्नित किया है। NB: यह अभी भी @ dty की टिप्पणी को ध्यान में नहीं रखता है क्योंकि मैं IP के उस रूप से परिचित नहीं हूँ; हालांकि वह सही है कि यह मान्य लगता है।
जॉनब्लेवन

आप इसके बजाय यह कोशिश करना चाह सकते हैं: (1 (? \ D \ d? | 2 [0-4] \ d। [0-4] \ d। 25 [0-5])
मॉर्ग।

यह गैर कैप्चरिंग के लिए अच्छी तरह से काम करता है -\b(?:(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b
Appy

3
है 09.09.09.09कोई मान्य IP माना जाता है? यह इस रेगेक्स से भी मेल खाता है। लेकिन पिंग जैसे त्रुटि संदेश फेंकता है ping: cannot resolve 09.09.09.09: Unknown host। मुझे लगता है कि मिलान-दशमलव संकेतन से मिलान को कम करना ही समझदारी हो सकती है। यह प्रविष्टि IP पतों में अग्रणी त्रुटियों पर चर्चा करती है।
रुइफेंग मा

82
^((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]?)$

स्वीकार करें :

127.0.0.1
192.168.1.1
192.168.1.255
255.255.255.255
0.0.0.0
1.1.1.01        # This is an invalid IP address!

अस्वीकार करें :

30.168.1.255.1
127.1
192.168.1.256
-1.2.3.4
1.1.1.1.
3...3

इकाई परीक्षणों के साथ ऑनलाइन प्रयास करें: https://www.debuggex.com/r/-EDZOqxTxhiTncN6/1


"3 ... 3" आईपी पते के बारे में क्या? 3 ... 3 को इस रेगेक्स का उपयोग करना स्वीकार किया जाता है
अंकुर लोरिया

8
1.1.1.01 के बारे में क्या? क्या इसे एक मान्य IPv4 पता माना जाता है? धन्यवाद।
ओडिएतला

यह regexp 1.1.1.01 वैलिड IPv4 एड्रेस के रूप में विचार करता है। ऑनलाइन यूनिट टेस्ट debuggex.com/r/-EDZOqxTxhiTncN6/1
Sllouyssgort

वैसे ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}$ही परिणाम प्राप्त करें debuggex.com/r/mz_-0dEm3wseIKqK , @Mark बायर्स उत्तर के साथ बहुत समान है
Sllouyssgort

@PriteshAcharya यहाँ पर ठीक काम करता है।
किड डायमंड

41

नवीनतम, सबसे छोटा, कम से कम पठनीय संस्करण ( 55 वर्ण )

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

यह संस्करण 250-5 के मामले में दिखता है, इसके बाद यह चतुराई से मामलों के लिए सभी संभावित मामलों को ओआरएस देता 200-249 100-199 10-99है। ध्यान दें कि |)भाग एक गलती नहीं है, लेकिन वास्तव में 0-9 रेंज के लिए अंतिम मामला है। मैंने ?:गैर-कैप्चरिंग समूह के हिस्से को भी छोड़ दिया है क्योंकि हम वास्तव में कैप्चर की गई वस्तुओं की परवाह नहीं करते हैं, उन्हें किसी भी तरह से कैप्चर नहीं किया जाएगा यदि हमारे पास पहले स्थान पर पूर्ण-मैच नहीं था।

पुराना और छोटा संस्करण (कम पठनीय) ( 63 वर्ण )

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

पुराना (पढ़ने योग्य) संस्करण ( 70 वर्ण )

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

यह (?!)उस मामले को हटाने के लिए नकारात्मक रूपांतर का उपयोग करता है जहां आईपी एक के साथ समाप्त हो सकता है.

सबसे पुराना उत्तर ( 115 वर्ण )

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

मुझे लगता है कि यह सबसे सटीक और सख्त रीजेक्स है, यह उन चीजों को स्वीकार नहीं करता है जैसे 000.021.01.0.यह लगता है कि यहां अन्य अधिकांश उत्तर हैं और एक के समान मामलों को अस्वीकार करने के लिए अतिरिक्त रेगेक्स की आवश्यकता है - अर्थात 0शुरुआती संख्या और एक आईपी जो एक के साथ समाप्त होता है.


यह इस थ्रेड तक एकमात्र सही उत्तर है। अन्य ऐसे पते याद करते हैं जैसे कि 0.0.0.0मिश्रित ओक्टल / दशमलव संकेतन को स्वीकार करते हैं 033.033.33.033या यहां तक ​​कि 999.999.999.999 की अनुमति देते हैं। कैसे इस रेगेक्स के बारे में जो इस उत्तर से 10 वर्ण छोटा है:(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
anneb

1
@tinmarino मैंने आपके संपादन को वापस कर दिया क्योंकि इसने 192.168.000.1 जैसी चीजों की अनुमति दी जो कि एक मान्य पता नहीं है। जो कोई भी इस उत्तर को संपादित करना चाहता है, कृपया इन जैसी समस्याओं से बचने के लिए पहले यहाँ टिप्पणी करें - मैं आमतौर पर बहुत तेजी से उत्तर देता हूं। हमेशा एक छोटे / बेहतर समाधान की तलाश में।
डेनियल गैबेंस्की

1
@DanailGabenski (और अन्य) मेमोरी के लिए, आपने इसे अंतिम के स्थान पर हल [01]?[0-9][0-9]?किया 1[0-9]{2}|[1-9]?[0-9]क्योंकि आप 0 को पसंद नहीं करते हैं । पुन: धन्यवाद ! मैं अपना समाधान मेरे रेगेक्स मास्टर सामान में रखूँगा।
तिनमारिनो 16

1
@tinmarino हां, डॉट-दशमलव प्रारूप जो कि आईपीवी 4 के लिए मानक बन गया है, हालांकि आधिकारिक तौर पर स्वीकार नहीं किया गया है कृपया निम्नलिखित देखें । विशेष रूप से बिंदु 3, जहां एक प्रारूप का सुझाव दिया गया था लेकिन समाप्त हो गया था। सत्यापन के साथ सख्त होने का एक माध्यमिक कारण यह है कि जब यूआई में प्रस्तुत किया जाता है, तो आईपी 23 के बजाय 023 जैसे गैर-दशमलव संख्याओं के साथ उपयोगकर्ताओं को बात बनाता है यह एक गलती / बग है। यह सत्यापन / सुरक्षा के साथ कठिनाइयों का कारण बनता है क्योंकि डुप्लिकेट से बचने के लिए 023 को 23 में बदलने की आवश्यकता है, आदि चीजों को बेहतर बनाने की कोशिश करने के लिए धन्यवाद!
डेनियल गैबेंस्की

1
आप इसे फैक्टरिंग से कम बाहर कर सकते हैं [0-9]के लिए 2[0-4], 1और छोटे मामलों। ^(?:(25[0-5]|(?:2[0-4]|1[0-9]|[1-9]|)[0-9])(\.(?!$)|$)){4}$
क्लेटन सिंह

11

IPv4 पता (सटीक कैप्चर) 255.255.255.255 के माध्यम से 0.0.0.0 से मेल खाता है, लेकिन 1.1.000.1 जैसे अमान्य पते पर कब्जा करता है। सटीकता के साथ आईपी नंबर से मिलान करने के लिए इस regex का उपयोग करें। 4 संख्याओं में से प्रत्येक को कैप्चरिंग समूह में संग्रहीत किया जाता है, ताकि आप उन्हें आगे की प्रक्रिया के लिए एक्सेस कर सकें।

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

JGsoft RegexBuddy लाइब्रेरी से लिया गया

संपादित करें: यह (\.|$)हिस्सा अजीब लगता है


2
अच्छा! मैंने उस काम का अधिक कुशल संशोधन किया, जो काम करने के लिए लगता है: "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$){4}\b- धन्यवाद!
मथिउ कार्टियर

2
@MatthieuCartier आपके कुशल रेगेक्स पैटर्न ने मेरे लिए काम नहीं किया,
R__raki__

1
255.255.255.000 एक मान्य आईपी नहीं है
स्टीफन ग्रिलॉन

6

मैं IPv4 पतों के लिए कुछ इसी तरह की खोज में था - एक regex जिसने आमतौर पर इस्तेमाल किए गए निजी आईपी पतों को मान्य होने से रोका (192.168.xy, 10.xyz, 172.16.xy) इसलिए इसे पूरा करने के लिए नेगेटिव लुक के लिए उपयोग किया जाता है।

(?!(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.).*)
(?!255\.255\.255\.255)(25[0-5]|2[0-4]\d|[1]\d\d|[1-9]\d|[1-9])
(\.(25[0-5]|2[0-4]\d|[1]\d\d|[1-9]\d|\d)){3}

(ये 3 अलग-अलग पंक्तियों में पठनीय उद्देश्यों के लिए तैयार किए गए पाठ्यक्रम की एक पंक्ति पर होना चाहिए) नियमित अभिव्यक्ति दृश्य

डीबगेजक्स डेमो

यह गति के लिए अनुकूलित नहीं किया जा सकता है, लेकिन अच्छी तरह से काम करता है जब केवल 'वास्तविक' इंटरनेट पते की तलाश है।

चीजें जो (और होनी चाहिए) विफल:

0.1.2.3         (0.0.0.0/8 is reserved for some broadcasts)
10.1.2.3        (10.0.0.0/8 is considered private)
172.16.1.2      (172.16.0.0/12 is considered private)
172.31.1.2      (same as previous, but near the end of that range)
192.168.1.2     (192.168.0.0/16 is considered private)
255.255.255.255 (reserved broadcast is not an IP)
.2.3.4
1.2.3.
1.2.3.256
1.2.256.4
1.256.3.4
256.2.3.4
1.2.3.4.5
1..3.4

आईपी ​​जो काम करेंगे (और करना चाहिए):

1.0.1.0         (China)
8.8.8.8         (Google DNS in USA)
100.1.2.3       (USA)
172.15.1.2      (USA)
172.32.1.2      (USA)
192.167.1.2     (Italy)

यदि कोई अन्य व्यक्ति addresses इंटरनेट आईपी पते को सामान्य निजी पते सहित नहीं ’को मान्य करने के लिए देख रहा है, तो बशर्ते


5

मुझे लगता है कि इस पोस्ट को पढ़ने वाले कई लोग सरल नियमित अभिव्यक्ति की तलाश में होंगे, भले ही वे कुछ तकनीकी रूप से अमान्य आईपी पते से मेल खाते हों। (और, जैसा कि कहीं और उल्लेख किया गया है, रेगेक्स शायद वैसे भी आईपी पते को ठीक से सत्यापित करने का सही उपकरण नहीं है।)

निकालें ^और, जहां लागू हो, के $साथ बदलें \b, यदि आप पंक्ति के आरंभ / अंत का मिलान नहीं करना चाहते हैं।

बेसिक रेगुलर एक्सप्रेशन (BRE) (GNU grep, GNU sed, और vim पर परीक्षण):

/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/

विस्तारित नियमित अभिव्यक्ति (ERE):

/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/

या:

/^([0-9]+(\.|$)){4}/

पर्ल-संगत रेगुलर एक्सप्रेशन (पीसीआरई) (पर्ल 5.18 पर परीक्षण):

/^\d+\.\d+\.\d+\.\d+$/

या:

/^(\d+(\.|$)){4}/

रूबी (रूबी 2.1 पर परीक्षण):

हालांकि पीसीआरई माना जाता है, रूबी ने जो भी कारण से इस रीगेक्स को पर्ल 5.18 द्वारा अनुमति नहीं दी थी:

/^(\d+[\.$]){4}/

इन सभी के लिए मेरे परीक्षण यहां ऑनलाइन हैं


3

यह कुछ की तुलना में थोड़ा लंबा है, लेकिन यह वह है जो मैं आईपीवी 4 पतों के मिलान के लिए उपयोग करता हूं। कोई समझौता नहीं के साथ सरल।

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

3

उपरोक्त उत्तर मान्य हैं लेकिन क्या होगा यदि आईपी पता पंक्ति के अंत में नहीं है और पाठ के बीच में है .. यह regex उस पर भी काम करेगा।

कोड: '\b((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.)){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\b'

इनपुट टेक्स्ट फ़ाइल:

ip address 0.0.0.0 asfasf
 sad sa 255.255.255.255 cvjnzx
zxckjzbxk  999.999.999.999 jshbczxcbx
sjaasbfj 192.168.0.1 asdkjaksb
oyo 123241.24121.1234.3423 yo
yo 0000.0000.0000.0000 y
aw1a.21asd2.21ad.21d2
yo 254.254.254.254 y0
172.24.1.210 asfjas
200.200.200.200
000.000.000.000
007.08.09.210
010.10.30.110

आउटपुट टेक्स्ट:

0.0.0.0
255.255.255.255
192.168.0.1
254.254.254.254
172.24.1.210
200.200.200.200

1
इसे नकारात्मक रूप से चिह्नित किया गया था, जब तक कि मैंने इसे वोट नहीं दिया। मैं इसके लिए वास्तव में ऐसा करने की कोशिश कर रहा हूं (जितना मैं स्वीकार करना चाहता हूं उससे अधिक घंटे)। यह एक रेखा पर कब्जा नहीं करेगा जिसमें एक रेखा पर एक से अधिक डॉट-क्वाड है, लेकिन मेरे उपयोग के मामले के लिए, मैं उसके साथ रह सकता हूं। यह एक उत्कृष्ट उत्तर है, इसे और अधिक वोटों की आवश्यकता है!
एनस्ट्रोपे

3

'' 'यह कोड मेरे लिए काम करता है, और उतना ही सरल है।

यहां मैंने आईपी का मान लिया है और मैं इसे रेगेक्स से मिलाने की कोशिश कर रहा हूं।

ip="25.255.45.67"    

op=re.match('(\d+).(\d+).(\d+).(\d+)',ip)

if ((int(op.group(1))<=255) and (int(op.group(2))<=255) and int(op.group(3))<=255) and (int(op.group(4))<=255)):

print("valid ip")

else:

print("Not valid")

ऊपर की स्थिति यह जांचती है कि यदि मूल्य सभी 4 ओकटेट्स के लिए 255 से अधिक है तो यह मान्य नहीं है। लेकिन शर्त लागू करने से पहले हमें उन्हें पूर्णांक में बदलना होगा क्योंकि मूल्य एक स्ट्रिंग में है।

समूह (0) मिलान किए गए आउटपुट को प्रिंट करता है, जबकि समूह (1) पहले मिलान किए गए मूल्य को प्रिंट करता है और यहां यह "25" और इतने पर है। '' '


StackOverflow में आपका स्वागत है। यदि आप कुछ शब्दों पर खर्च कर सकते हैं तो आपके उत्तर को ओपी मुद्दे को क्यों हल करना चाहिए, तो यह बहुत अच्छा होगा। केवल-कोड उत्तर आमतौर पर खराब उत्तर होते हैं क्योंकि वे साथी कोडर्स को यह समझने में मदद नहीं करते हैं कि उन्होंने क्या गलत किया था।
डेविद विटाली

उपयोगकर्ताओं के लिए इसे पठनीय बनाने के लिए अपने कोड में उचित इंडेंटिंग का उपयोग करें
सैयद मेहताब हसन


2

0 से 255 की संख्या के लिए मैं इस रेगेक्स का उपयोग करता हूं:

(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))

ऊपर रेगेक्स 0 से 255 तक पूर्णांक संख्या से मेल खाएगा, लेकिन 256 से मेल नहीं खाता।

तो IPv4 के लिए मैं इस regex का उपयोग करता हूं:

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

यह इस संरचना में है: ^(N)((\.(N)){3})$जहाँ N, 0 से 255 तक की संख्या से मेल खाने के लिए उपयोग किया जाने वाला regex है।
यह regex IP से नीचे की तरह मेल करेगा:

0.0.0.0
192.168.1.2

लेकिन उन नीचे नहीं:

10.1.0.256
1.2.3.
127.0.1-2.3

IPv4 CIDR (क्लासलेस इंटर-डोमेन रूटिंग) के लिए मैं इस regex का उपयोग करता हूं:

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

यह इस संरचना में है: ^(N)((\.(N)){3})\/M$जहाँ N 0 से 255 तक की संख्या से मिलान करने के लिए उपयोग किया जाने वाला regex है, और M 0 से 32 तक की संख्या का मिलान करने के लिए उपयोग किया जाने वाला regex है।
यह regex नीचे की तरह CIDR से मेल खाएगा:

0.0.0.0/0
192.168.1.2/32

लेकिन उन नीचे नहीं:

10.1.0.256/16
1.2.3./24
127.0.0.1/33

और IPv4 CIDR की सूची के लिए जैसे "10.0.0.0/16", "192.168.1.1/32"मैं इस regex का उपयोग करता हूं:

^("(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))")((,([ ]*)("(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))((\.(([0-9])|([1-9][0-9])|(1([0-9]{2}))|(2[0-4][0-9])|(25[0-5]))){3})\/(([0-9])|([12][0-9])|(3[0-2]))"))*)$

यह इस संरचना में है: ^(“C”)((,([ ]*)(“C”))*)$जहां C, CIDR (जैसे 0.0.0.0/0) से मेल खाने के लिए उपयोग किया जाने वाला रीजैक्स है।
यह रेगेक्स नीचे की तरह CIDR की सूची से मेल खाएगा:

“10.0.0.0/16”,”192.168.1.2/32”, “1.2.3.4/32”

लेकिन उन नीचे नहीं:

“10.0.0.0/16” 192.168.1.2/32 “1.2.3.4/32”

हो सकता है कि यह छोटा हो जाए, लेकिन मेरे लिए यह इतना आसान है कि मैं इसे ठीक समझ सकूं।

आशा है कि इससे सहायता मिलेगी!


एसओ में आपका स्वागत है, हम आपके इनपुट की सराहना करते हैं! क्या आप इस बारे में थोड़ा विस्तार से बता सकते हैं कि अलग-अलग रेगेक्स '(विशेष रूप से अंतिम एक) क्या कर रहे हैं?
बी - रिआन

1

मैं अन्य सभी उत्तरों से एक रेगीक्स बनाने में कामयाब रहा।

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

IEEE 802.x ईथरनेट मानक के अनुसार IP सत्यापन IP रेंज 0.xxx है >>> अमान्य IP की अनुमति नहीं दी जानी चाहिए। # 1. आईपी रेंज 1.xxx से शुरू होती है। 126.xxx >>>> को कॉन्फ़िगर करने की अनुमति दी जा सकती है। 2. 2.IP रेंज 127.xxx >>>> की अनुमति नहीं दी जानी चाहिए - अमान्य आईपी। # 3.IP रेंज 128.xxx से 223.xxx >> कॉन्फ़िगर करने की अनुमति दी जा सकती है। संभाल करने का बेहतर तरीका नीचे दिया गया है: ^ (22 [0-3] | 2 [0-1] [0-9] - [1] [0-9] [0-9]? [[1-9] ] [0-9] | [1-9]) \ (25 [0-5] |। 2 [0-4] [0-9] | [01] [0-9] [0-9]? ) \ (25 [0-5] |। 2 [0-4] [0-9] | [01] [0-9] [0-9]) \ (25 [0-4] |?। 2 [0-4] [0-9] | [०१] [०- ९] [०- ९]?] $
योगेश अग्रवाल

1

सबनेट मास्क के साथ:

^$|([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\
.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\
.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\
.([01]?\\d\\d?|2[0-4]\\d|25[0-5])
((/([01]?\\d\\d?|2[0-4]\\d|25[0-5]))?)$

1
(((25[0-5])|(2[0-4]\d)|(1\d{2})|(\d{1,2}))\.){3}(((25[0-5])|(2[0-4]\d)|(1\d{2})|(\d{1,2})))

टेक्स्ट में मैच खोजने के लिए टेस्ट करें, https://regex101.com/r/9CcMEN/2

आईपी ​​पते की प्रत्येक संख्या में मान्य संयोजनों को परिभाषित करने वाले नियम निम्नलिखित हैं:

  • कोई भी एक या दो अंकों की संख्या।
  • किसी भी तीन अंकों की संख्या के साथ शुरुआत 1

  • किसी भी तीन अंकों वाला नंबर शुरुआत के साथ 2करता है, तो दूसरा अंक है 0 के माध्यम से 4

  • किसी भी तीन अंकों वाला नंबर शुरुआत के साथ 25करता है, तो तीसरे अंकों है 0 के माध्यम से 5

Let'start के साथ (((25[0-5])|(2[0-4]\d)|(1\d{2})|(\d{1,2}))\.), चार नेस्टेड सबएक्सप्रेस का एक सेट है, और हम उन्हें रिवर्स ऑर्डर में देखेंगे। (\d{1,2})के 0माध्यम से किसी भी एक या दो अंकों की संख्या या संख्या से मेल खाता है 99(1\d{2})किसी भी तीन अंकों की संख्या के साथ शुरू होता है 1( 1किसी भी दो अंक के बाद), या संख्या के 100माध्यम से 199(2[0-4]\d)के 200माध्यम से संख्याओं का मिलान करता है 249(25[0-5])के 250माध्यम से संख्याओं का मिलान करता है 255। इनमें से प्रत्येक सबएक्सप्रेस का |प्रत्येक के बीच एक और सब-डेक्सप्रेशन के साथ संलग्न किया गया है (ताकि चार सबएक्सप्रेस में से एक को मैच करना है, सभी नहीं)। संख्याओं की श्रेणी \.मैच के बाद आती है ., और फिर पूरी श्रृंखला (सभी संख्या विकल्प प्लस)\.) अभी तक एक और उपसंचाई में संलग्न है और तीन बार उपयोग करके दोहराया गया है {3}। अंत में, संख्याओं की सीमा \.को अंतिम आईपी पते की संख्या से मिलान करने के लिए (अनुगामी के बिना इस समय ) दोहराया जाता है । चार संख्याओं में से प्रत्येक के बीच मूल्यों को सीमित करके 0और 255, यह पैटर्न वास्तव में वैध आईपी पते से मेल खा सकता है और अमान्य पते को अस्वीकार कर सकता है।

अंश से: बेन फोर्टा "सीखना नियमित अभिव्यक्तियाँ।"


यदि आईपी पते की शुरुआत में न तो कोई पात्र चाहिए ^और न ही अंत में, और $मेटाचैकर्स को क्रमशः इस्तेमाल किया जाना चाहिए।

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

टेक्स्ट में मैच खोजने के लिए टेस्ट करें, https://regex101.com/r/uAP31A/1


1

मैंने इसे थोड़ा सरल और छोटा बनाने की कोशिश की।

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

यदि आप जावा / कोटलिन की तलाश कर रहे हैं:

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

अगर कोई जानना चाहता है कि यह यहाँ कैसे काम करता है, इसका स्पष्टीकरण है। यह वास्तव में बहुत आसान है। बस इसे आज़माएँ: p:

 1. ^.....$: '^' is the starting and '$' is the ending.

 2. (): These are called a group. You can think of like "if" condition groups.

 3. |: 'Or' condition - as same as most of the programming languages.

 4. [01]?\d{1,2}: '[01]' indicates one of the number between 0 and 1. '?' means '[01]' is optional. '\d' is for any digit between 0-9 and '{1,2}' indicates the length can be between 1 and 2. So here the number can be 0-199.

 5. 2[0-4]\d: '2' is just plain 2. '[0-4]' means a number between 0 to 4. '\d' is for any digit between 0-9. So here the number can be 200-249.

 6. 25[0-5]: '25' is just plain 25. '[0-5]' means a number between 0 to 5. So here the number can be 250-255.

 7. \.: It's just plan '.'(dot) for separating the numbers.

 8. {3}: It means the exact 3 repetition of the previous group inside '()'.

 9. ([01]?\d{1,2}|2[0-4]\d|25[0-5]): Totally same as point 2-6

गणितीय रूप से यह ऐसा है:

(0-199 OR 200-249 OR 250-255).{Repeat exactly 3 times}(0-199 OR 200-249 OR 250-255)

इसलिए, जैसा कि आप सामान्य रूप से देख सकते हैं कि यह आईपी पते के लिए पैटर्न है। मुझे आशा है कि यह नियमित अभिव्यक्ति को थोड़ा समझने में मदद करता है। : p


1

मैंने इसे थोड़ा सरल और छोटा बनाने की कोशिश की।

^ (? ([01] \ घ {1,2} | 2 [0-4] \ घ | 25 [0-5])।) {3} ([01] \ घ {1,2} |? 2 [0-4] \ घ | 25 [0-5]) $

यदि आप जावा / कोटलिन की तलाश कर रहे हैं:

^ (? ([01] \ घ {1,2} | 2 [0-4] \ घ |। 25 ​​[0-5]) \) {3} ([01] \ घ {1,2}? | 2 [0-4] \ घ | 25 [0-5]) $

अगर कोई जानना चाहता है कि यह यहाँ कैसे काम करता है, इसका स्पष्टीकरण है। यह वास्तव में बहुत आसान है। बस इसे आज़माएँ: p:

 1. ^.....$: '^' is the starting and '$' is the ending.

 2. (): These are called a group. You can think of like "if" condition groups.

 3. |: 'Or' condition - as same as most of the programming languages.

 4. [01]?\d{1,2}: '[01]' indicates one of the number between 0 and 1. '?' means '[01]' is optional. '\d' is for any digit between 0-9 and '{1,2}' indicates the length can be between 1 and 2. So here the number can be 0-199.

 5. 2[0-4]\d: '2' is just plain 2. '[0-4]' means a number between 0 to 4. '\d' is for any digit between 0-9. So here the number can be 200-249.

 6. 25[0-5]: '25' is just plain 25. '[0-5]' means a number between 0 to 5. So here the number can be 250-255.

 7. \.: It's just plan '.'(dot) for separating the numbers.

 8. {3}: It means the exact 3 repetition of the previous group inside '()'.

 9. ([01]?\d{1,2}|2[0-4]\d|25[0-5]): Totally same as point 2-6

गणितीय रूप से यह ऐसा है:

(0-199 OR 200-249 OR 250-255).{Repeat exactly 3 times}(0-199 OR 200-249 OR 250-255)

इसलिए, जैसा कि आप सामान्य रूप से देख सकते हैं कि यह आईपी पते के लिए पैटर्न है। मुझे आशा है कि यह नियमित अभिव्यक्ति को थोड़ा समझने में मदद करता है। : p


0
    const char*ipv4_regexp = "\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\."
    "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\."
    "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\."
    "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";

मैंने JGsoft RegexBuddy लाइब्रेरी से सी लैंग्वेज (regcomp / regexec) में ली गई नियमित अभिव्यक्ति को अनुकूलित किया और मुझे पता चला कि यह काम करता है लेकिन लिनक्स जैसे कुछ OS में थोड़ी समस्या है। वह नियमित अभिव्यक्ति 192.168.100.009 जैसे IPv4 पते को स्वीकार करती है, जहां लिनक्स में 009 को एक अष्टाधारी मूल्य माना जाता है, इसलिए पता वही नहीं है जो आपने सोचा था। मैंने उस नियमित अभिव्यक्ति को अनुसरण के रूप में बदल दिया:

    const char* ipv4_regex = "\\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\."
           "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\."
           "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\."
           "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\b";

192.168.100.009 पर उस नियमित एक्सप्रेस का उपयोग करते हुए एक मान्य ipv4 पता नहीं है, जबकि 192.168.100.9 ठीक है।

मैंने मल्टीकास्ट पते के लिए एक नियमित अभिव्यक्ति को भी संशोधित किया है और यह निम्नलिखित है:

    const char* mcast_ipv4_regex = "\\b(22[4-9]|23[0-9])\\."
                        "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\."
                        "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]?)\\."
                        "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\b";

मुझे लगता है कि आपको अपने एप्लिकेशन को विकसित करने के लिए नियमित अभिव्यक्ति को उस भाषा के अनुकूल बनाना होगा, जिसका आप उपयोग कर रहे हैं

मैंने जावा में एक उदाहरण दिया:

    package utility;

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class NetworkUtility {

        private static String ipv4RegExp = "\\b(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d?)\\b";

        private static String ipv4MulticastRegExp = "2(?:2[4-9]|3\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d?|0)){3}";

        public NetworkUtility() {

        }

        public static boolean isIpv4Address(String address) {
            Pattern pattern = Pattern.compile(ipv4RegExp);
            Matcher matcher = pattern.matcher(address);

            return matcher.matches();
        }

        public static boolean isIpv4MulticastAddress(String address) {
             Pattern pattern = Pattern.compile(ipv4MulticastRegExp);
             Matcher matcher = pattern.matcher(address);

             return matcher.matches();
        }
    }

0
-bash-3.2$ echo "191.191.191.39" | egrep 
  '(^|[^0-9])((2([6-9]|5[0-5]?|[0-4][0-9]?)?|1([0-9][0-9]?)?|[3-9][0-9]?|0)\.{3}
     (2([6-9]|5[0-5]?|[0-4][0-9]?)?|1([0-9][0-9]?)?|[3-9][0-9]?|0)($|[^0-9])'

>> 191.191.191.39

(यह एक डीएफए है ​​जो संपूर्ण एड्र स्पेस (प्रसारण आदि सहित) से मेल खाता है) और कुछ नहीं।



0

मुझे यह नमूना बहुत उपयोगी लगा, इसके अलावा यह अलग-अलग आईपीवी 4 नोटेशन की अनुमति देता है।

अजगर का उपयोग कर नमूना कोड:

    def is_valid_ipv4(ip4):
    """Validates IPv4 addresses.
    """
    import re
    pattern = re.compile(r"""
        ^
        (?:
          # Dotted variants:
          (?:
            # Decimal 1-255 (no leading 0's)
            [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}
          |
            0x0*[0-9a-f]{1,2}  # Hexadecimal 0x0 - 0xFF (possible leading 0's)
          |
            0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 (possible leading 0's)
          )
          (?:                  # Repeat 0-3 times, separated by a dot
            \.
            (?:
              [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}
            |
              0x0*[0-9a-f]{1,2}
            |
              0+[1-3]?[0-7]{0,2}
            )
          ){0,3}
        |
          0x0*[0-9a-f]{1,8}    # Hexadecimal notation, 0x0 - 0xffffffff
        |
          0+[0-3]?[0-7]{0,10}  # Octal notation, 0 - 037777777777
        |
          # Decimal notation, 1-4294967295:
          429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}|
          42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|
          4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8}
        )
        $
    """, re.VERBOSE | re.IGNORECASE)
    return pattern.match(ip4) <> None

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

यह रेगेक्स 08.8.8.8 या 8.08.8.8 या 8.8.08.8 या 8.8.8.08 को स्वीकार नहीं करेगा


यह एक उदाहरण 127.0.0.1 और 0.0.0.0 के लिए याद करता है
anneb

^ ((\ |। ^) (25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] [0-9] | [1-9] [0-9] ? | [0-9] |? 0)) ((\ |। ^) (25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] [0-9] | [1-9] [0-9] |? 0)) {2} ((25 [0-5] |। 2 [0-4] [0-9] | 1 [0-9] [0- 9] | [१- ९] [०- ९]; ०) $)
सुडिस्टैक [’

1
युक्ति के अनुसार, अग्रणी शून्य को अस्वीकार करना सही है।
जॉन हॉगलैंड

0

जब तक आईपी अंकों (आईपी के पीछे या आगे) के अलावा किसी भी वर्ण के चारों ओर लपेटा जाता है, तब तक एक वैध आईपी पते को ढूंढता है। 4 संदर्भ बनाए गए: $ + {पहला}। $ + {दूसरा}। $ + {तीसरा}। $ + {आगे}

Find String:
#any valid IP address
(?<IP>(?<![\d])(?<first>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<second>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<third>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<forth>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))(?![\d]))
#only valid private IP address RFC1918
(?<IP>(?<![\d])(:?(:?(?<first>10)[\.](?<second>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5])))|(:?(?<first>172)[\.](?<second>(:?1[6-9])|(:?2[0-9])|(:?3[0-1])))|(:?(?<first>192)[\.](?<second>168)))[\.](?<third>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<forth>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))(?![\d]))

Notepad++ Replace String Option 1: Replaces the whole IP (NO Change):
$+{IP}

Notepad++ Replace String Option 2: Replaces the whole IP octect by octect (NO Change)
$+{first}.$+{second}.$+{third}.$+{forth}

Notepad++ Replace String Option 3: Replaces the whole IP octect by octect (replace 3rd octect value with 0)
$+{first}.$+{second}.0.$+{forth}
NOTE: The above will match any valid IP including 255.255.255.255 for example and change it to 255.255.0.255 which is wrong and not very useful of course.

एक वास्तविक मूल्य के साथ प्रत्येक ओक्टेक्ट के हिस्से को बदलना लेकिन आप अपनी स्वयं की खोज का निर्माण कर सकते हैं और इसकी जगह ले सकते हैं जो टेक्स्ट फ़ाइलों में आईपी को संशोधित करने के लिए वास्तविक उपयोगी है:

for example replace the first octect group of the original Find regex above:
(?<first>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))
with
(?<first>10)

and
(?<second>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))
with
(?<second>216)
and you are now matching addresses starting with first octect 192 only

Find on notepad++:
(?<IP>(?<![\d])(?<first>10)[\.](?<second>216)[\.](?<third>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<forth>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))(?![\d]))

आप पहले की तरह ही बैक-रेफ़री समूहों का उपयोग करके उसी तरह से री-रेफरी समूहों का उपयोग कर सकते हैं।

आप इस बात का अंदाजा लगा सकते हैं कि नीचे दिया गया मिलान कैसे:

cat ipv4_validation_test.txt
Full Match:
0.0.0.1
12.108.1.34
192.168.1.1
10.249.24.212
10.216.1.212
192.168.1.255
255.255.255.255
0.0.0.0


Partial Match (IP Extraction from line)
30.168.1.0.1
-1.2.3.4
sfds10.216.24.23kgfd
da11.15.112.255adfdsfds
sfds10.216.24.23kgfd


NO Match
1.1.1.01
3...3
127.1.
192.168.1..
192.168.1.256
da11.15.112.2554adfdsfds
da311.15.112.255adfdsfds

Grep का उपयोग करके आप नीचे परिणाम देख सकते हैं:

From grep:
grep -oP '(?<IP>(?<![\d])(?<first>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<second>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<third>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<forth>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))(?![\d]))' ipv4_validation_test.txt
0.0.0.1
12.108.1.34
192.168.1.1
10.249.24.212
10.216.1.212
192.168.1.255
255.255.255.255
0.0.0.0
30.168.1.0
1.2.3.4
10.216.24.23
11.15.112.255
10.216.24.23


grep -P '(?<IP>(?<![\d])(?<first>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<second>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<third>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<forth>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))(?![\d]))' ipv4_validation_test.txt
0.0.0.1
12.108.1.34
192.168.1.1
10.249.24.212
10.216.1.212
192.168.1.255
255.255.255.255
0.0.0.0
30.168.1.0.1
-1.2.3.4
sfds10.216.24.23kgfd
da11.15.112.255adfdsfds
sfds10.216.24.23kgfd


#matching ip addresses starting with 10.216
grep -oP '(?<IP>(?<![\d])(?<first>10)[\.](?<second>216)[\.](?<third>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))[\.](?<forth>(:?\d)|(:?[1-9]\d)|(:?1\d{2})|(:?2[0-4]\d)|(:?25[0-5]))(?![\d]))' ipv4_validation_test.txt
10.216.1.212
10.216.24.23
10.216.24.23

0

IPv4 एड्रेस बहुत ही जटिल चीज है।

नोट : इंडेंटेशन और लाइनिंग केवल दृष्टांत उद्देश्यों के लिए हैं और वास्तविक RegEx में मौजूद नहीं हैं।

\b(
  ((
    (2(5[0-5]|[0-4][0-9])|1[0-9]{2}|[1-9]?[0-9])
  |
    0[Xx]0*[0-9A-Fa-f]{1,2}
  |
    0+[1-3]?[0-9]{1,2}
  )\.){1,3}
  (
    (2(5[0-5]|[0-4][0-9])|1[0-9]{2}|[1-9]?[0-9])
  |
    0[Xx]0*[0-9A-Fa-f]{1,2}
  |
    0+[1-3]?[0-9]{1,2}
  )
|
  (
    [1-3][0-9]{1,9}
  |
    [1-9][0-9]{,8}
  |
    (4([0-1][0-9]{8}
      |2([0-8][0-9]{7}
        |9([0-3][0-9]{6}
          |4([0-8][0-9]{5}
            |9([0-5][0-9]{4}
              |6([0-6][0-9]{3}
                |7([0-1][0-9]{2}
                  |2([0-8][0-9]{1}
                    |9([0-5]
    ))))))))))
  )
|
  0[Xx]0*[0-9A-Fa-f]{1,8}
|
  0+[1-3]?[0-7]{,10}
)\b

ये IPv4 पते उपरोक्त RegEx द्वारा मान्य हैं।

127.0.0.1
2130706433
0x7F000001
017700000001
0x7F.0.0.01 # Mixed hex/dec/oct
000000000017700000001 # Have as many leading zeros as you want
0x0000000000007F000001 # Same as above
127.1
127.0.1

इन्हें खारिज कर दिया जाता है।

256.0.0.1
192.168.1.099 # 099 is not a valid number
4294967296 # UINT32_MAX + 1
0x100000000
020000000000

0

^((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]?))$


ऊपर आईपी पते के लिए regex होगा: 221.234.000.112 भी 221.234.0.112, 221.24.03.112, 221.234.0.1 के लिए


आप उपरोक्त सभी प्रकार के पते की कल्पना कर सकते हैं


0

मैं PCRE और defineकीवर्ड का उपयोग करूंगा :

/^
 ((?&byte))\.((?&byte))\.((?&byte))\.((?&byte))$
 (?(DEFINE)
     (?<byte>25[0-5]|2[0-4]\d|[01]?\d\d?))
/gmx

डेमो: https://regex101.com/r/IB7j48/2

इसका कारण (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)पैटर्न को चार बार दोहराने से बचना है। अन्य समाधान जैसे कि नीचे एक अच्छी तरह से काम करता है, लेकिन यह प्रत्येक समूह को कैप्चर नहीं करता है क्योंकि यह कई लोगों द्वारा अनुरोध किया जाएगा।

/^((\d+?)(\.|$)){4}/ 

4 कैप्चर समूहों के लिए एकमात्र दूसरा तरीका पैटर्न को चार बार दोहराना है:

/^(?<one>\d+)\.(?<two>\d+)\.(?<three>\d+)\.(?<four>\d+)$/

इसलिए perl में एक ipv4 कैप्चर करना बहुत आसान है

$ echo "Hey this is my IP address 138.131.254.8, bye!" | \
  perl -ne 'print "[$1, $2, $3, $4]" if \
    /\b((?&byte))\.((?&byte))\.((?&byte))\.((?&byte))
     (?(DEFINE)
        \b(?<byte>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))
    /x'

[138, 131, 254, 8]

0

सबसे सटीक, सीधा और कॉम्पैक्ट IPv4 regexp जिसकी मैं कल्पना कर सकता हूं

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

लेकिन प्रदर्शन / दक्षता के बारे में क्या ... क्षमा करें मुझे नहीं पता, कौन परवाह करता है?


0

इसे इस्तेमाल करे:

\b(([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\.(2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[1-9]))\b

0
ip address can be from 0.0.0.0 to 255.255.255.255

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

(0|1)?[0-9][0-9]? - checking value from 0 to 199
2[0-4][0-9]- checking value from 200 to 249
25[0-5]- checking value from 250 to 255
[.] --> represent verify . character 
{3} --> will match exactly 3
$ --> end of string

0

IP- पता को मान्य करने के लिए regex अभिव्यक्ति निम्नलिखित है।

^((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]?)$

0

आसान तरीका

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

डेमो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.