2010-05-14 14 views
13

यह दिलचस्प सवाल Regex to match anything (including the empty string) except a specific given string संबंधित है कि MySQL में नकारात्मक रूप से आगे कैसे करें। पोस्टरएक पीसीआरई को एक पॉज़िक्स आरई में कैसे परिवर्तित करें?

Kansas(?! State)

का असर पाने के लिए क्योंकि MySQL लुक-आगे दावे को लागू नहीं करता है चाहता था, जवाब में से एक नंबर आया बराबर

Kansas($|[^ ]| ($|[^S])| S($|[^t])| St($|[^a])| Sta($|[^t])| Stat($|[^e]))

पोस्टर ने बताया कि है संभावित रूप से बहुत सारे अभिव्यक्तियों के लिए एक पिटा।

क्या पीसीआरई (या कुछ अन्य पैकेज) का एक स्क्रिप्ट/उपयोगिता/मोड है जो एक पीसीआरई (यदि संभव हो) को बराबर रेगेक्स में परिवर्तित करेगा जो पर्ल की स्नैज़ी सुविधाओं का उपयोग नहीं करता है? मुझे पूरी तरह से पता है कि कुछ पर्ल-स्टाइल रेगेक्स को सामान्य रेगेक्स के रूप में नहीं कहा जा सकता है, इसलिए मैं उपकरण को असंभव करने की उम्मीद नहीं करता, बिल्कुल!

+0

साल पहले मैंने रेगेक्स को एनएफए या डीएफए में बदलने और एक रेगेक्स में बदलने के लिए एक उपकरण देखा है, लेकिन मुझे अभी यह नहीं मिल रहा है। इस उपकरण ने इनपुट रेगेक्स में चौराहे और पूरक की अनुमति दी, और आईआईआरसी पुनर्निर्मित रेगेक्स ने इन संरचनाओं का उपयोग नहीं किया। –

+15

यह ध्यान देने योग्य है कि प्रश्न में दो नियमित अभिव्यक्ति बिल्कुल समान नहीं हैं: हालांकि वे दोनों मूल उदाहरण में एक ही काम करते हैं, लेकिन वे कुछ परिस्थितियों में अलग-अलग व्यवहार करेंगे। उदाहरण के लिए, यदि प्रतिस्थापन में उपयोग किया जाता है (उदाहरण के लिए 'कान्सास' को स्ट्रिंग 'कान्सास स्टारबक्स' में 'होम' के साथ बदलना), पहला 'होम स्टारबक्स' देगा, जबकि दूसरा 'होमबक्स' देगा। इस संबंध में, मानक पॉज़िक्स नियमित अभिव्यक्ति होना संभव नहीं है जो नकारात्मक रूप से आगे की नकल की नकल करता है। – psmears

उत्तर

2

आप यह नहीं करना चाहते हैं। वास्तव में उन्नत सुविधाओं को मूलभूत सुविधाओं में अनुवाद करना मुश्किल नहीं है - यह संकलक का एक और स्वाद है, और कंपाइलर लेखकों को बहुत चालाक लोग हैं - लेकिन स्नैज़ी सुविधाओं को हल करने वाली अधिकांश चीजें हैं (ए) एक के साथ असंभव है मानक रेगेक्स क्योंकि वे गैर-नियमित भाषाओं को पहचानते हैं, इसलिए आपको उन्हें अनुमानित करना होगा ताकि कम से कम वे सीमित-लंबाई वाले टेक्स्ट या (बी) के लिए काम कर सकें, लेकिन केवल घातीय आकार के रेगेक्स के साथ। और 'घातीय' compsci- "वहां मत जाओ" के लिए बोलते हैं। आप आउटऑफमेमरी त्रुटियों और प्रतीत होता है-अनंत लूप में घुमाएंगे यदि आप किसी भी चीज़ पर एक घातीय समाधान का उपयोग करने का प्रयास करते हैं जिसे आप वास्तव में संसाधित करना चाहते हैं।

दूसरे शब्दों में, सभी उम्मीदों को छोड़ दें, जो यहां प्रवेश करते हैं। रेगेक्स को यह करने के लिए वस्तुतः हमेशा बेहतर होता है कि यह क्या अच्छा है और शेष अन्य उपकरणों के साथ करें। एक रेगेक्स को बदलने के रूप में भी ऐसी सरल चीज बहुत अधिक आसान है, वास्तविक रेगेक्स इन्वर्टर से होने वाली राक्षसता के मुकाबले नकारात्मक ऑपरेटर के साथ संयोजन में मूल रेगेक्स के साथ हल किया जाता है।

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