में अक्षरों से ठीक से कैसे बचें I स्ट्रिंग के अंदर एक स्ट्रिंग खोज करना चाहते हैं। बस MySTR.search(Needle)
कह रहा है।regexp
समस्या तब होती है जब यह needle
स्ट्रिंग में विशेष regex वर्ण जैसे *, + और इसी तरह होते हैं। यह त्रुटि invalid quantifier
के साथ विफल रहता है।
मैंने वेब ब्राउज़ किया है और पता चला है कि स्ट्रिंग \Q some string \E
से बच सकती है।
हालांकि, यह हमेशा वांछित व्यवहार का उत्पादन नहीं करता है। उदाहरण के लिए:
var sNeedle = '*Stars!*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
परिणाम -1 है। ठीक।
var sNeedle = '**Stars!**';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
परिणाम "अवैध मात्रात्मक" है। ऐसा इसलिए होता है क्योंकि 2 या अधिक विशेष वर्ण एक दूसरे को 'स्पर्श' कर रहे हैं, क्योंकि:
var sNeedle = '*Dont touch me*Stars!*Dont touch me*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
ठीक काम करेगा।
मुझे पता है कि मैं escapeAllBadChars(sInStr)
फ़ंक्शन कर सकता हूं और प्रत्येक संभावित विशेष रेगेक्स चरित्र से पहले डबल स्लेश जोड़ सकता हूं, लेकिन मुझे आश्चर्य है कि ऐसा करने का एक आसान तरीका है या नहीं?
\ क्यू ... \ ई पर्ल में काम करता है, यकीन है कि के बारे में नहीं हालांकि कहीं और। –
मुझे लगता है कि आपके तीसरे उदाहरण में सितारे आप जो सोचते हैं वह नहीं कर रहे हैं। उन्हें शाब्दिक * वर्णों के रूप में व्याख्या नहीं किया जा रहा है, लेकिन उनके सामने वर्णों के लिए क्वांटिफायर के रूप में। –
@ मैथ्यू, जावा में यह पर्ल में काम करता है (अन्य भाषाओं के बारे में निश्चित नहीं है)। –