2011-08-18 5 views
5

मैं वर्तमान में ([1-9]|1[0-2]) उपयोग कर रहा हूँ 1 से 12 के लिए आदानों का प्रतिनिधित्व करने के (अग्रणी शून्य अनुमति नहीं है।)रेगेक्स संख्या श्रेणियों का प्रतिनिधित्व कैसे करें (उदा। 1 से 12)?

हालांकि यह नहीं बल्कि लगता है hacky, और कुछ दिनों में यह एकमुश्त गंदा लग रहा है।

☞ क्या उचित ऐसा करने के लिए निर्मित तरीके से है?

☞ संख्या श्रेणियों का प्रतिनिधित्व करने के कुछ अन्य तरीके क्या हैं?

+0

यदि "बड़ा बेहतर है", तो (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12) बेहतर होगा। – Ingo

+0

@Ingo फ्रैंक होने के लिए जो – Pacerier

+0

से पहले मेरे विचारों को पार नहीं कर पाया है, फिर भी यह किसी भी सरल समाधान में है और आप जो चाहते हैं उसके बारे में एक संकेत देता है: महीने की संख्या? – Ingo

उत्तर

4

मैं जाने के लिए करते हैं नहीं मिलता है [2-9]|1[0-2]? जैसे फॉर्मों के साथ जो बैकट्रैकिंग से बचाता है, हालांकि यह यहां थोड़ा अंतर बनाता है। मुझे ऐसी "अस्पष्टता" से बचने के लिए एक्सएमएल स्कीमा द्वारा सशर्त किया गया है, भले ही रेगेक्स उन्हें ठीक से संभाल सके।

+0

मूल रूप से, जब matcher "1" वर्ण देखता है, तो "अर्थ" संदिग्ध होता है जब तक कि यह अधिक वर्ण न देखे। क्या यह 1 [9] के लिए "1" या 1 [0-2] के लिए "1" है? Regex अर्थ के बारे में परवाह नहीं करता है, लेकिन यह कभी-कभी एक दक्षता चिंता है क्योंकि मैचर को अस्पष्टता हल होने तक दोनों शाखाओं को सक्रिय रखना होता है। – xan

+0

तो आप रेगेक्स मशीन की आंखों में कह रहे हैं यह सबसे तेज़ समाधान है: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12? – Pacerier

+0

नहीं, मैं '[2-9] 'की तुलना नहीं कर रहा हूं' 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9' - यह नहीं पता कि कौन सा तेज़ है। मैं '10 |' के साथ '1 | 10' की तुलना कर रहा हूं। ऐसा नहीं है कि यह इस तरह के एक छोटे से उदाहरण के लिए एक मामला बना देगा, लेकिन अधिक शामिल regexes के लिए, यह शाखाओं के सामान्य उपसर्ग को हटाने में मदद मिलेगी। शायद एक बेहतर उदाहरण: 'एबी | एसी' 'ए (बी | सी) 'में सुधार हुआ। – xan

8

हाँ, सही:

[1-9]|1[0-2] 

नहीं तो आप 10

+0

heys मेरा संपादित प्रश्न – Pacerier

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