Freemarker में नियमित अभिव्यक्तियों का उपयोग कैसे करें (\ b, \ w)?

${str?replace("\d+", "", "r")};

मैं संख्याओं को हटाने के लिए \ d का उपयोग करना चाहता था, लेकिन यह काम नहीं किया !!!

लेकिन $ {str? प्रतिस्थापित करें ("[0-9]", "", "r")}; काम करता है !!!

तो, मैं जानना चाहता हूं कि regex का उपयोग कैसे करें \ d , \ b , \ w , आदि?

1
@ddekany हाँ, आप सही हैं, \ d का उपयोग करते समय एक त्रुटि संदेश है
जोड़ा लेखक Nonesome, स्रोत
ऐसा लगता है कि फ्रीमेकर जावा आधारित टेम्पलेट इंजन है। तो आप \\ d + क्यों नहीं आज़माते?
जोड़ा लेखक HamZa, स्रोत
यह चुपचाप "काम नहीं करता" है, यह आपको एक पार्सिंग त्रुटि संदेश देता है ... मेरा मतलब है, अगली बार कुछ विफल होने पर त्रुटि संदेश शामिल हैं।
जोड़ा लेखक ddekany, स्रोत

1 उत्तर

आपको बैकस्लाश को दोगुना करने की आवश्यकता है:

${str?replace("\\d+", "", "r")};

ऐसा इसलिए है क्योंकि रीज एस्केपिंग नियम नियमों से बचने से पहले स्ट्रिंग से बचने के नियम लागू होते हैं। तो स्ट्रिंग "\\ d" का अनुवाद regex \ d में किया जाता है जो तब एक अंक से मेल खाता है।

यदि आपकी स्ट्रिंग "\ d" है, तो स्ट्रिंग प्रोसेसर इसे एक शाब्दिक d (क्योंकि \ d में मान्यता प्राप्त स्ट्रिंग एस्केप अनुक्रम नहीं है , इसलिए इसे नजरअंदाज कर दिया गया है)।

7
जोड़ा
अगर फ्रीमार्कर दस्तावेज़ वास्तव में इसे दस्तावेज करते हैं तो प्यारा होगा! धन्यवाद!
जोड़ा लेखक MaxRocket, स्रोत
यह काम करता है, बहुत कुछ!
जोड़ा लेखक Nonesome, स्रोत
बीटीडब्लू, फ्रीमार्कर \ d से d का अनुवाद नहीं करता है; यह एक पार्सिंग त्रुटि संदेश देता है।
जोड़ा लेखक ddekany, स्रोत
"\\ d +" को r "\ d +" के रूप में लिखा जा सकता है, जहां r "कच्चे" के लिए खड़ा है, regexp नहीं। कच्चे तारों में बैकस्लाश विशेष नहीं होते हैं, जो उन्हें नियमित अभिव्यक्तियों के लिए व्यावहारिक बनाता है।
जोड़ा लेखक ddekany, स्रोत