2013-10-23 5 views
8

एक स्थान के निर्देश जो
Nginx स्थान के लिए सबसे कारगर नियमित अभिव्यक्ति

location = /[0-9a-zA-Z_-]{1,6} { content_by_lua_file ....} 

दूसरे शब्दों में कुछ इस तरह से मेल खाता है परिभाषित करने के लिए सबसे कारगर तरीका क्या है यूआरआई जो के साथ "1 से 6 वर्ण से एक स्ट्रिंग से मेल खाता - "," _ ", अंक और अक्षर।

या यह तेजी से की तरह मेरे LUA कोड के भीतर स्ट्रिंग की लंबाई की जाँच करने के लिए, एक स्थान के निर्देश का उपयोग करके जो उत्पादन उत्पन्न होगा

location/{content_by_lua_file...} 

उत्तर

1

मुझे लगता है कि लुआ में आप न केवल लंबाई की जांच करना होगा , लेकिन स्ट्रिंग की सामग्री भी।
Nginx नियमित अभिव्यक्तियों के लिए सी लाइब्रेरी पीसीआरई का उपयोग करता है।
पीसीआरई-जेआईटी भी है जो जेआईटी नियमित अभिव्यक्ति को संकलित करता है, विशेष रूप से उपयोगी अगर नियमित अभिव्यक्ति आपके प्रश्न में से अधिक जटिल है। मुझे लगता है कि Nginx में यह तेज़ है।

9

नियमित अभिव्यक्ति वे क्या करते हैं पर बहुत ही कुशल हैं।

जब कार्य छोटा होता है (उदाहरण के लिए किसी विशेष स्ट्रिंग की उपस्थिति की जांच करना), प्लेटफॉर्म के आधार पर एक स्ट्रिंग फ़ंक्शन रेगेक्स से तेज़ हो सकता है। यहां, आप एक चरित्र सीमा और लंबाई दोनों के लिए जांच कर रहे हैं। यह असंभव है कि लूआ कोड (रन टाइम पर संकलित) nginx द्वारा उपयोग की जाने वाली पीसीआरई रेगेक्स लाइब्रेरी के पूर्व-संकलित सी कोड से तेज़ होगा।

सामान्य तौर पर, a string from 1 to 6 characters with "-", "_", digits and letters के लिए regex

^[-\w]{1,6}$ 

है क्योंकि

  • ^ लंगर का दावा है कि हम स्ट्रिंग
  • \w शब्द की शुरुआत में हैं के रूप में लिखा जा सकता है चरित्र अक्षर, अंक और अंडरस्कोर वर्ण
  • से मेल खाता हैलंगर का दावा है कि हम nginx में स्ट्रिंग के अंत में कर रहे हैं

हालांकि,, ~ (अनुरोध के साथ शुरू होता है) ऑपरेटर हमें शुरुआत लंगर ^ छोड़ सकते हैं। आप कुछ इस तरह लिखना होगा:

location ~ [-\w]{1,6}$ { 
    # some rewrite code, for example 
    # rewrite ^([^/]+)/?$ /oldsite/$1 break; 
} 

एक और के लिए जानकारी का निवाला उत्सुक: लुआ अपने आप में, इसके बाद के संस्करण regex एक लुआ पैटर्न, जहां % अक्षरों से परे बनाने के लिए \ के स्थान पर प्रयोग किया जाता है में तब्दील किया जा सकता है:

^[-%w]{1,6}$ 

संदर्भ

इस
+0

जवाब मैं +1 लिखा है होता है – bukart

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