2014-04-05 9 views
6

उदाहरण के लिए के तार, मैं 'फिटिंग', 'खोखला', 'ट्रिलियन'
नहीं बल्कि 'हैलो' या 'पैटर्न' को बाहर निकालना चाहतेबाहर निकालें पैटर्न "अब्बा"

मैं पहले से ही काम करने के लिए निम्नलिखित मिल गया

(.)(.)\2\1 

जो 'खोखले' या 'फिटिंग' से मेल खाता है, लेकिन मुझे इसे अस्वीकार करने में परेशानी है।

निकटतम बात मैं

^.(?!(.)(.)\2\1) 

जो शामिल नहीं 'फिटिंग' और 'खोखला' लेकिन 'ट्रिलियन'

उत्तर

3

यह तुम्हारे पास क्या है से थोड़ी अलग है। आपका वर्तमान रेगेक्स दूसरे चरित्र के रूप में पैलिंड्रोमिसिटी (?) की जांच करेगा। आप पूरी स्ट्रिंग जाँच करना चाहते हैं के बाद से, आप इसे एक छोटे से बदलने की जरूरत है:

^(?!.*(.)(.)\2\1) 

प्रथम एंकर को यह सुनिश्चित करेंगे कि जांच केवल शुरुआत (अन्यथा पर किया जाता है, regex पर एक मैच का दावा कर सकते स्ट्रिंग का अंत)।

फिर नकारात्मक दिखने के भीतर .* स्ट्रिंग के भीतर कहीं भी जांच को सक्षम कर देगा। यदि कोई मैच है, तो पूरे मैच में असफल हो जाएं।

+0

धन्यवाद, यह काम किया! टोपी^कुंजी है! – user3501363

+0

@ user3501363 आपका स्वागत है! :) अब आपके पास 1 9 3 अंक हैं;) – Jerry

2

यह खरब के साथ मेल नहीं खाता क्योंकि आप जोड़ा ^. मतलब है कि यह होना आवश्यक है शुरुआत से मैच से पहले एक चरित्र। आपके पहले दो मामलों के लिए इसमें h और f वर्ण हैं। तो यदि आप इसे ^..(?!(.)(.)\2\1) में बदलते हैं तो यह trillion के लिए काम करेगा।

तो सामान्य रूप में regex होगा:

(?!.*(.)(.)\2\1) 
    ^^ any number of characters(other than \n) 
संबंधित मुद्दे