हेक्साडेसिमल संख्या के लिए नियमित अभिव्यक्ति?


113

मैं एक नियमित अभिव्यक्ति कैसे बनाऊं जो पाठ में हेक्साडेसिमल संख्याओं का पता लगाता है?

उदाहरण के लिए, '0x0f4', '0acdecf822eeff32aca5830e438cb54aa722e3', और '8BADF00D'।


1
Regex वास्तव में पार्स नहीं करता है। सभी तरह की चीजों को निकालने की कोशिश करें और हेक्साडेसिमल नहीं हैं।
ब्लेंडर

जवाबों:


193

निम्नलिखित के बारे में कैसे?

0[xX][0-9a-fA-F]+

एक 0 से शुरू होने वाली अभिव्यक्ति का मिलान निम्न या अपरकेस x से होता है, जिसके बाद 0-9, या उससे ऊपर या AF में एक या अधिक वर्ण होते हैं।


35
इसे छोटा किया जा सकता है /0x[\da-f]/i, लेकिन अन्यथा, +1।
निकलैस बी।

20
@NiklasB। आपका शॉर्टहैंड केवल वैध है यदि पर्ल रीजेक्स का उपयोग किया जाता है, यदि पॉसिक्स रेगेक्स का उपयोग किया जाता है, तो स्टीवन का समाधान सबसे छोटा है। किसी भी तरह से, स्टीवन का समाधान पर्ल और पॉसिक्स रेगेक्स दोनों के लिए काम करता है।
डेविड एम। साइजडेक

समझ गया! अगर हेक्स संख्या 0x या 0X से शुरू होती है तो स्टीवन द्वारा समाधान अच्छा है। यह बेहतर काम करना चाहिए: ^ [0-9A-F] + $ यह हेक्स पैटर्न को भी पहचान सकता है जैसे: '535GH0G73' जावा के लिए, हम इसे जांचने के लिए उदाहरण String.matches () का उपयोग कर सकते हैं .. प्रतिक्रिया के लिए धन्यवाद दोस्तों :)

2
'0x [\ da-f] {2}' संख्या को सीमित करने के लिए भी बेहतर है
यज़ान रावशदेह

2
क्या यह दूसरा और तीसरा उदाहरण संख्या, 0acdadecf822eeff32aca5830e438cb54aa722e3 और 8BADF00D से मेल खाएगा?
पीटर मोर्टेंसन

43

सटीक सिंटैक्स आपकी सटीक आवश्यकताओं और प्रोग्रामिंग भाषा पर निर्भर करता है, लेकिन मूल रूप से:

/[0-9a-fA-F]+/

या अधिक बस, iयह केस-असंवेदनशील बनाता है।

/[0-9a-f]+/i

यदि आप रूबी का उपयोग करने के लिए पर्याप्त भाग्यशाली हैं, तो आप कर सकते हैं:

/\h+/

EDIT - स्टीवन श्रोएडर के जवाब ने मुझे 0x बिट के बारे में मेरी समझ को गलत बना दिया था, इसलिए मैंने अपने सुझावों को तदनुसार अपडेट किया है। यदि आप भी 0x से मेल खाना चाहते हैं, तो समतुल्य हैं

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

जोड़ा गया अधिक - यदि 0x को वैकल्पिक बनाने की आवश्यकता है (जैसा कि प्रश्न का अर्थ है):

/(0x)?[0-9a-f]+/i

क्या आप मुझे आरई के ऊपर का कारण समझा सकते हैं?
saurcery

4
@noobDroid विशेष रूप से आप मुझे क्या समझाना चाहेंगे?
साइमनमेयर

18

कोई बड़ी बात नहीं है, लेकिन अधिकांश रेगेक्स इंजन POSIX चरित्र वर्गों का समर्थन करते हैं, और [:xdigit:]हेक्स पात्रों के मिलान के लिए है, जो सामान्य 0-9a-fA-Fसामान की तुलना में सरल है ।

तो, अनुरोध के रूप में regex (यानी वैकल्पिक के साथ 0x) है:/(0x)?[[:xdigit:]]+/



11

यह उल्लेखनीय है कि MD5 का पता लगाना (जो उदाहरणों में से एक है) के साथ किया जा सकता है:

[0-9a-fA-F]{32}

5

यदि आप पर्ल या PHP का उपयोग कर रहे हैं, तो आप प्रतिस्थापित कर सकते हैं

[0-9a-fA-F]

साथ में:

[[:xdigit:]]

यह एक स्व-निहित जवाब होना चाहिए।
पीटर मोर्टेंसन

3

केवल रिकॉर्ड के लिए मैं निम्नलिखित निर्दिष्ट करूंगा:

/^[xX]?[0-9a-fA-F]{6}$/

में है कि यह जाँच करता है यह है कि कौन सा अलग है छह मान्य वर्ण और मामले में लोअरकेस या अपरकेस एक्स पर हम एक है को रोकने के लिए।


2

यदि आप स्ट्रिंग के बीच में एक विशिष्ट हेक्स चरित्र की तलाश कर रहे हैं, तो आप "\ xhh" का उपयोग कर सकते हैं जहां hx हेक्साडेसिमल में वर्ण है। मैंने कोशिश की है और यह काम करता है। मैं C ++ Qt के लिए फ्रेमवर्क का उपयोग करता हूं लेकिन यह अन्य मामलों में समस्याओं को हल कर सकता है, आपके द्वारा उपयोग किए जाने वाले स्वाद (php, javascript, python, golang, आदि) पर निर्भर करता है।

यह उत्तर इससे लिया गया था: http://ult-tex.net/info/perl/


अरे! हालांकि यह पर्ल के लिए सही हो सकता है, लेकिन सभी प्रोग्रामिंग भाषाओं में रेगुलर एक्सप्रेशंस के लिए ऐसा प्रतीत नहीं होता है। के अनुसार इस \x के बराबर है \uअन्य भाषाओं में।
मौरिस

"जासूसी एंडा" क्या है?
पीटर मोर्टेंसन

0

यह सुनिश्चित करता है कि आपके पास तीन से अधिक वैध जोड़े नहीं हैं:

(([a-fA-F]|[0-9]){2}){3}

किसी भी अधिक या कम से कम तीन जोड़े मान्य वर्ण मेल करने में विफल रहते हैं।


0

मामले में आपको एक इनपुट के भीतर इसकी आवश्यकता होती है जहां उपयोगकर्ता टाइप कर सकता है 0और उपसर्ग के 0xबिना भी हेक्स संख्या नहीं 0x:

^0?[xX]?[0-9a-fA-F]*$

0

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

^#[0-9a-fA-F]{6}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.