2011-05-27 16 views
7

के साथ संख्या 1-9 की श्रृंखला से मेल खाने के लिए रेगेक्स का उपयोग करें, मुझे संख्याओं की एक श्रृंखला से मिलान करने में सक्षम होना चाहिए, (1 और 9 के बीच कोई भी संख्या), उपयोगकर्ता के प्रवेश के रूप में कई अलग-अलग अंकों के साथ, लेकिन नहीं पुनरावृत्ति।कोई पुनरावृत्ति

123456789 -> मैच
1223 -> कोई मुकाबला नहीं

वास्तव में, संख्या 1 से 9 के बीच अंक लंबा, केवल संख्या से युक्त होना चाहिए, और किसी भी अंकों को दोहराना नहीं।

मैं रेगेक्स का उपयोग करके यह कैसे करूँगा?

+2

क्या संख्या आवश्यक रूप से आदेश दिया गया है? – Vache

+0

नहीं, कोई आदेश नहीं। –

उत्तर

3

कुछ नीचे की तरह काम करना चाहिए:

(?!.*([1-9]).*\1)^[1-9]{1,9}$ 

(?!.*([1-9]).*\1) - नकारात्मक नज़र आगे चल सके कि अंक दोहराने नहीं है।

नमूना मैच: http://regexr.com?2trr6

+0

मैं अपने नमूना संख्याओं के मिलान के लिए यह नहीं प्राप्त कर सकता: '12351874'। क्या आप? संपादित करें: जब तक कि वे पहले स्ट्रिंग के भीतर कहीं भी दिखाई देने वाली संख्या नहीं चाहते हैं ... –

+0

जो मेल नहीं खाता - अंक "1" दोहराया जाता है। यह समाधान सही ढंग से कहता है कि यह मेल नहीं खाता है। – Tadmas

+0

@ ब्रैड क्रिस्टी - क्षमा करें, वास्तव में यहां अपने प्रश्न को समझ नहीं पाएंगे – manojlds

0
^(?:([1-9])(?!\1))+$ 

है यही कारण है, एक अंकों, कुछ के बाद जो एक ही अंकों नहीं है, कम से कम एक बार।

क्षमा करें, गलत प्रश्न पूछे गए। मैंने सोचा कि तुम्हारा मतलब है कि यह असफल होना चाहिए यदि एक ही संख्या में लगातार दो बार उपयोग किया जाता है। यदि आप चाहते हैं पूरे अंक के अनुक्रम के लिए कोई पुनरावृत्ति, का उपयोग करें:

^(?:([1-9])(?!.*\1))+$ 
+0

प्रश्न बहुत स्पष्ट नहीं है लेकिन मुझे उम्मीद है कि प्रत्येक अंक केवल एक बार अनुमति है, उदा। '123123' एक मैच नहीं होगा। –

+0

"121" के साथ काम नहीं करता है। Regex.IsMatch सच देता है। – Tadmas

+0

काम नहीं करता है - http://regexr.com?2trqq – manojlds

1

मैं ईमानदारी से ग # से ज्यादा php का उपयोग करें, लेकिन यह

^(?:([1-9])(?![1-9]*?\1))*$ 
0

काम करना चाहिए यहाँ एक अलग समाधान है। इस तरह मैंने किया होगा। मैं लुकहेड/लुकबेइंड्स का बड़ा प्रशंसक नहीं हूं जब तक वे कोड को वास्तव में आसान नहीं बनाते।

string numbers = "123456789"; 
string example = "12345 1123456 19283741 987654321"; 

var matches = Regex.Matches(example, @"\d+"); 
for (int i = 0; i < matches.Count; i++) { 
    var match = matches[i].Value; 
    if (!numbers.Any(number => match.Count(x => x == number) >= 2)) { 
     Console.WriteLine(match); 
    } 
} 

आप इसे चलाते हैं, तो आप यह प्रिंट देखेंगे:

12345 
987654321 

मुझे लगता है कि यह बहुत मैं यहाँ क्या कर रहा सरल है।

मैं पाठ से सभी संख्याओं को निकाल रहा हूं, इससे कोई फर्क नहीं पड़ता कि यह अंक दोहराया गया है या नहीं, और फिर, प्रत्येक संख्या (1 - 9) के लिए, यह केवल उन मैचों में ही होगा जिनमें एक से अधिक पुनरावृत्ति नहीं है।

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