2013-05-23 3 views
6

मैं इस साइट पर रेगेक्स प्रश्न पढ़ रहा हूं लेकिन मेरा मुद्दा थोड़ा अलग लगता है। मुझे 2 अंकों की संख्या, जैसे कि 23 से 75 तक मिलान करना होगा। मैं इसे एचपी-यूएक्स यूनिक्स सिस्टम पर कर रहा हूं। मुझे 3 - 44 के उदाहरण मिले लेकिन किसी भी अंक संख्या, लंबाई में तय की गई कुछ भी नहीं, जो थोड़ा आश्चर्यजनक है, लेकिन शायद मैं परिवर्तनीय लंबाई उदाहरण उत्तर को समझ नहीं पा रहा हूं।नियमित अभिव्यक्ति - दो डिजिट रेंज (23-79)?

+6

क्या आप वाकई यहां एक रेगेक्स चाहते हैं? यह एक अभिन्न प्रकार के रूपांतरण की तरह लगता है जिसके बाद पूर्णांक तुलना अधिक उपयुक्त हो सकती है। खासकर अगर सीमा भविष्य में बदल सकती है। – Paulpro

+2

मुझे दूसरा @ पॉलप्रू की सिफारिश दो - जबकि एक रेगेक्स * यह कर सकता है, यह एक गरीब है (मैं नौकरी के लिए "भयानक" कहने का लुत्फ उठाता हूं)। –

+0

'23 <= the_number <= 75' के साथ क्या गलत है? –

उत्तर

7

चूंकि आप यह इंगित नहीं कर रहे हैं कि यह किसी अन्य वर्ण (या एक बड़ी स्ट्रिंग के बीच में) के अतिरिक्त है, तो मैंने यह तर्क देने के लिए यहां तर्क दिया है कि आपको किसी संख्या के भाग से मिलान करने की आवश्यकता होगी स्ट्रिंग। यह आपको वहां ले जाना चाहिए। हम दूसरी संख्या के लिए एक सीमा बना रहे हैं जिसे हम केवल उन पात्रों की अनुमति दे रहे हैं। फिर हम एक or के रूप में अन्य श्रेणियों के लिए यह तुलना कर रहे हैं:

(2[3456789]|[3456][0-9]|7[]) 

Oded के रूप में विख्यात आप इस रूप में अच्छी तरह के बाद से उप पर्वतमाला भी स्वीकार कर रहे हैं कर सकते हैं (आवेदन में REGEX के कार्यान्वयन का उपयोग कर रहे पर निर्भर करता है):

(2[3-9]|[3-6][0-9]|7[0-5]) 

शीर्षक आप एक से 9 तक पिछले 5 बदल जाएगा 75-79 से जाने के लिए के आधार पर:

(2[3-9]|[3-6][0-9]|7[0-9]) 

आप एक सेंट के रूप में विशेष रूप से इन नंबरों से मेल करने की कोशिश कर रहे हैं, तो अंगूठी (शुरुआत से अंत तक) तो आप स्ट्रिंग की शुरुआत और अंत को इंगित करने के लिए संशोधक ^ और $ का उपयोग करेंगे।

Regex का एक उत्कृष्ट तकनीकी संदर्भ नहीं है यहाँ पर्वतमाला:

http://www.regular-expressions.info/numericranges.html

आप ग्रेप की तरह कुछ का उपयोग कर और लाइनों है कि अन्य सामग्री के साथ संख्या शामिल है तो आप की तरह कुछ कर सकता मिलान करने के लिए प्रयास कर रहे हैं इस श्रेणियों के लिए के माध्यम से 79:

grep "[^0-9]?(2[3-9]|[3-6][0-9]|7[0-9])[^0-9]?" folder 
+3

को छोटा किया जा सकता है '(2 [3-9] | [3-6] [0-9] | 7 [0-5]) ' – Oded

+0

दाएं। मैंने ऐसे मामलों में भाग लिया है जहां यह हर कार्यान्वयन में काम नहीं करता है लेकिन मानक के अनुसार इसे चाहिए। –

+1

यदि आप 2345 – SolidSnake

0

आप संख्या के दो वर्गों है आप मिलान कराना चाहते:

  • अंकों 2, 3 और 9
  • 3 और 7 के बीच अंक में से एक के बीच अंक में से एक हो, उसमें कोई अंकों

संपादित करें द्वारा पीछा किया: खैर, उस शीर्षक की सीमा (है 23-79)।अपने प्रश्न (23-75) के भीतर, आप तीन है:

  • अंकों 2, 3 और 9
  • 3 और 6 के बीच अंक में से एक के बीच अंक में से एक हो, उसमें कोई अंकों
  • द्वारा पीछा किया Regex_For_Range

    29 से 79 करने के लिए:

  • अंकों 7, 0 अंकों के बीच में से एक और 5
+0

लगभग - '75' तक,' 79' नहीं। – Oded

+0

@ ओडेड द ओप ने इस विषय में 79 लिखा और फिर पोस्ट के शरीर में 75। यह अस्पष्ट है कि वह वास्तव में चाहता है। – Paulpro

+0

शीर्षक उदाहरण में टाइपो के लिए माफ़ी, दो संख्या उदाहरण थे, मुख्य बिंदु केवल 2 अंक था। लेकिन मैं समझता हूं कि आपका क्या मतलब है, 79 [3-7] [0-9] की पूरी श्रृंखला में फिट है, 75 इसमें अधिक सटीक था कि मैं हमेशा पूरी श्रृंखला को भर नहीं सकता था। इस प्रकार, 3 भाग श्रेणी का उत्तर वह है जिसे मैं ढूंढ रहा था। – user2414817

3

यह उपकरण के बाद आपको क्या चाहिए ठीक है \b(2[3-9]|[3-7][0-9])\b

से 29 से 75: \b(29|[3-6][0-9]|7[0-5])\b

और सिर्फ मनोरंजन के लिए, 192 1742 के लिए: \b(19[2-9]|[2-9][0-9]{2}|1[0-6][0-9]{2}|17[0-3][0-9]|174[0-2])\b :)

+0

इस उपकरण में अभी क्रेडेंशियल प्रॉम्प्ट हैं, क्या आप मालिकों को जानते हैं? – weston

+0

@ वेस्टन बहुत बुरा! मैं इस प्रमाणीकरण के कारण जानने के लिए उनसे संपर्क करूंगा और मैं आपके पास वापस आऊंगा। – sp00m

+0

ठीक है अगर आप उन्हें जानते हैं, तो शायद आप उन्हें स्रोत खोलने के लिए मना सकते हैं। जिथब पर पोस्ट करें, या यहां – weston

-1

यह करना चाहिए:

/^([2][3-9]|[3-6][0-9]|[7][0-5])$/ 

^ और $ यह सख्त कर देगा कि यह केवल 2 संख्याओं से मेल खाएगा, इसलिए यदि आपके पास i.e 234 है तो यह काम नहीं करेगा।

+1

तो क्या आपने अपना जवाब घटाया और कॉपी किया? अछा नहीं लगता। –

+1

इसके अतिरिक्त यह काम नहीं करेगा अगर वे 'grep' जैसे कुछ लाइनों का मिलान कर रहे हैं, जिनकी संख्या वे खोज रहे हैं। –

+1

@ AbsoluteƵERØ - मेरे दोस्त ने मैंने आपके जवाब को वोट नहीं दिया। आवश्यकताओं को जांचने के लिए मुझे 5 मिनट से अधिक समय लगे और फिर इसे पोस्ट किया तो मैंने बस आपके जवाब की जांच की। – SolidSnake

1

अगर मैं चाहता हूँ 2 अंकों रेंज 0-63

/^[0-9]|[0-5][0-9]|6[0-3]$/ 
  1. [0-9] 0 से 9
  2. [0-5] [0-9] एकल अंक की अनुमति देगा होगा 00 से करने के लिए 59
  3. 6 [0-3] की अनुमति देते हैं कि आप किसी भी दो अंक के लिए नियमित अभिव्यक्ति ले जा सकते हैं 63

इस तरह जब तक 60 से अनुमति देगा रेंज

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