2008-09-15 13 views
11

एक नियमित अभिव्यक्ति बनाना संभव है जो सभी इनपुट स्ट्रिंग को अस्वीकार करता है?नियमित अभिव्यक्ति जो सभी इनपुट को अस्वीकार करती है?

+0

आपको यहां 'regex' क्यों चाहिए, आप कुछ अन्य विकल्पों जैसे' रीडोनली इनपुट ', यदि (इनपुट। लम्बाई <0) ..., यदि (! Value) –

उत्तर

10

शायद यह:

[^\w\W] 

\ डब्ल्यू - शब्द वर्ण (अक्षर, अंकों, आदि)
\ डब्ल्यू - डब्ल्यू

[\ के विपरीत^\ w \ W] - हमेशा विफल होना चाहिए, क्योंकि किसी भी चरित्र को वर्ण वर्गों में से एक होना चाहिए - \ w या \ W

अन्य स्निपेट:

$.^ 

$ - स्ट्रिंग के अंत में स्थिति पर जोर
^ - लाइन
के शुरू में स्थिति पर जोर। - किसी भी चार

(?#it's just a comment inside of empty regex) 

खाली अग्रदर्शी/पीछे काम करना चाहिए:

(?<!) 
+0

खाली स्ट्रिंग के बारे में क्या? –

+0

क्रिस Conway, क्या आप मजाक कर रहे हैं? :) – aku

+0

नहीं। ये regex किसी भी गैर-खाली स्ट्रिंग से मेल खाने के लिए देखो। खाली स्ट्रिंग के बारे में क्या? यह भी एक संभावित इनपुट है। –

-1

संपादित करें: [^ \ n \ r \ w \ s]

+0

सभी इनपुट स्वीकार नहीं करेंगे तार? मुझे लगता है कि आप उस कथन को अस्वीकार करना चाहेंगे। –

+0

यह जो मैं ढूंढ रहा हूं उसके ठीक विपरीत है। आपकी नियमित अभिव्यक्ति सबकुछ स्वीकार करती है, मुझे जो चाहिए वह एक नियमित अभिव्यक्ति है जो सब कुछ अस्वीकार करती है। – Kasper

+0

Unkwntech, आपका रेगेक्स विराम चिह्न प्रतीकों से मेल खाता है, आदि – aku

1

क्यों तुम भी है कि चाहेगा? अगर स्टिकमेंट चाल चलती है तो क्या कोई आसान नहीं होगा? की तर्ज पर कुछ:

if (inputString != "") 
    doSomething() 
-1

खैर,

मुझे यकीन है कि अगर मैं समझ नहीं कर रहा हूँ, चूंकि मैंने हमेशा तारों से मेल खाने के तरीके की नियमित अभिव्यक्ति के बारे में सोचा था। मैं कहूंगा कि आपके पास सबसे अच्छा शॉट रेगेक्स का उपयोग नहीं कर रहा है।

लेकिन, आप भी regexp कि ^$ तरह खाली लाइनों या एक regexp कि [^\w\s] जैसे शब्दों/रिक्त स्थान से मेल नहीं खाते से मेल खाता उपयोग कर सकते हैं ...

आशा है कि यह मदद करता है!

4
(?=not)possible 

? = एक सकारात्मक लुकहेड है। वे सभी regexp स्वादों में समर्थित नहीं हैं, लेकिन कई में।

अभिव्यक्ति "नहीं" की तलाश करेगी, फिर उसी स्थिति से शुरू होने वाले "संभव" की तलाश करें (क्योंकि लुकहेड स्ट्रिंग में आगे नहीं बढ़ते हैं)।

+0

जिसने मेरा दिन बनाया =)। ठीक है;) –

1

मेरे लिए ऐसा लगता है कि आप गलत तरीके से किसी समस्या पर हमला कर रहे हैं, वास्तव में क्या आप हल करने का प्रयास कर रहे हैं?

आप नियमित अभिव्यक्ति कर सकते हैं जो सबकुछ पकड़ लेता है और परिणाम को अस्वीकार करता है।

, उदा, जावास्क्रिप्ट में:

if (! str.match(/./)) 

लेकिन तब तुम सिर्फ

if (!foo) 

बजाय कर सकता है, के रूप में @ [जनवरी-हानी] ने कहा।

यदि आप किसी अन्य regex में इस तरह के एक regex एम्बेड करने के लिए देख रहे हैं, तो आप बजाय के लिए $ या ^ देख जा सकता है, या जैसे @ [हेनरिक-एन] ने उल्लेख किया lookaheads का उपयोग करें।

लेकिन जैसा कि मैंने कहा, ऐसा लगता है कि "मुझे लगता है कि मुझे एक्स चाहिए, लेकिन मुझे वास्तव में क्या चाहिए y समस्या है।

0

यह "नियमित अभिव्यक्ति" से आपका क्या मतलब है इस पर निर्भर करता है। क्या आपका मतलब किसी विशेष प्रोग्रामिंग भाषा या पुस्तकालय में regexps है? उस स्थिति में उत्तर शायद हां है, और आप उपर्युक्त उत्तरों में से किसी एक को संदर्भित कर सकते हैं।

यदि आपका मतलब कंप्यूटर विज्ञान कक्षाओं में पढ़ाए जाने वाले नियमित अभिव्यक्तियों का है, तो उत्तर नहीं है। प्रत्येक नियमित अभिव्यक्ति कुछ स्ट्रिंग से मेल खाती है। यह खाली स्ट्रिंग हो सकती है, लेकिन यह हमेशा से कुछ से मेल खाती है।

किसी भी मामले में, मेरा सुझाव है कि आप अपने प्रश्न का शीर्षक संपादित करें ताकि आप किस प्रकार के नियमित अभिव्यक्तियों को समझ सकें।

2

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

बीजगणितीय पूर्णता के लिए कार्यात्मक प्रोग्रामिंग की भावना में, आप कुछ छोटे प्राथमिक regexes जैसे "सब कुछ अनुमति है" और "कुछ भी अनुमति नहीं है" चाहते हैं।

0

[^]+ इसे करना चाहिए।

इस से जुड़ी एकू की टिप्पणी के जवाब में, मैंने इसे ऑनलाइन रेगेक्स परीक्षक (http://www.regextester.com/) के साथ परीक्षण किया, और इसलिए मान लें कि यह जावास्क्रिप्ट के साथ काम करता है। मुझे इसे "वास्तविक" कोड में परीक्षण न करने के लिए कबूल करना होगा। ;)

+1

मुझे आश्चर्य है, रेगेक्स इंजन इसका समर्थन करता है? AFAIK, [^] अधिकांश प्रोसेसर में संकलित नहीं होगा – aku

+0

जावास्क्रिप्ट में, '[^] 'मैचों ** किसी भी ** चरित्र। यह '[\ s \ S] 'idiom के लिए किसी भी चरित्र-मिलान-न्यूलाइन से मेल खाने के लिए एक और संक्षिप्त विकल्प है, लेकिन कृपया इसका उपयोग न करें। जैसा कि @कू ने कहा, अधिकांश अन्य रेगेक्स स्वाद इसे सिंटैक्स त्रुटि के रूप में मानेंगे। लेकिन बड़ी समस्या यह है कि वे इसे लंबे समय तक regex के हिस्से के रूप में गलत व्याख्या कर सकते हैं। उदाहरण के लिए '[^] [^]' जावास्क्रिप्ट में किसी भी अक्षर से मेल खाता है, लेकिन PHP में यह किसी भी चरित्र के * एक * से मेल खाता है जो ']', '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –

5

सबसे अच्छा मानक regexs (यानी, कोई अग्रदर्शी या बैक-संदर्भ) है कि सभी आदानों अस्वीकार (@aku ऊपर के बाद कर रहे हैं)

.^ 

और

$. 

ये हैं फ्लैट विरोधाभास: "इसकी शुरुआत से पहले एक चरित्र के साथ एक स्ट्रिंग" और "इसके अंत के बाद एक चरित्र के साथ एक स्ट्रिंग।"

नोट: यह है कि कुछ regex कार्यान्वयन के रूप में इन पैटर्न अस्वीकार होगा संभव है बीमार का गठन (यह जांचने के लिए कि ^ एक पैटर्न और $ अंत में की शुरुआत में आता है ... एक नियमित अभिव्यक्ति के साथ बहुत आसान है), लेकिन मैंने जो कुछ चेक किया है, उन्हें स्वीकार करते हैं। ये कार्यान्वयन में भी काम नहीं करेंगे जो न्यूलाइन से मेल खाने के लिए ^ और $ की अनुमति देते हैं।

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