2011-05-31 14 views
5

मैं लुआ regex तुल्यता सुविधाओं के लिए नया हूँ, मैं निम्नलिखित नियमित अभिव्यक्ति है, जो दशमलवलुआ में इस नियमित अभिव्यक्ति को कैसे लिखें?

\b[0-9]*.\b[0-9]*(?!]) 

मूल रूप से संख्या से मेल खाना चाहिए लिखने के लिए की जरूरत है, यह दशमलव प्रारूप में संख्या से मेल खाता है (उदाहरण के लिए: 1, 1.1, 0.1, 0.11), जो ']' के साथ समाप्त नहीं होता है, मैं string.gmatch का उपयोग कर लुआ के साथ इस तरह एक रेगेक्स लिखने की कोशिश कर रहा हूं, लेकिन मैं लुआ मिलान के भाव के साथ काफी अनुभवहीन हूं ...

धन्यवाद!

+0

वैसे, आपकी नियमित अभिव्यक्ति वास्तव में मेल नहीं खाती है कि आप इसे मिलान करना चाहते हैं। यह खाली स्ट्रिंग से मेल खाता है, लेकिन '.11' से मेल नहीं खाता है। –

+0

फिक्स्ड कि, यह वास्तव में आवश्यक नहीं था :) – Goles

+0

यह '0.11' से मेल नहीं खाता है ... आपको लगता है कि आप अपने दूसरे' 0-9] 'के बाद '' '' '' '' 'चाहते हैं। (और खाली स्ट्रिंग से मेल खाने से बचने के लिए शायद '*' में से एक '+' हो।) –

उत्तर

5

लुआ नियमित अभिव्यक्ति नहीं है मुख्य रूप से एक पूर्ण नियमित क्योंकि अभिव्यक्ति लाइब्रेरी लूआ से भी बड़ी होगी।

क्या लुआ है बजाय matching patterns है, जो (कई उपयोग के मामलों के लिए, लेकिन अभी भी पर्याप्त) जिस तरह से कम शक्तिशाली हैं:

  • नहीं "शब्द सीमा" मिलान है,
  • कोई विकल्प,
  • और कोई लुकहेड या समान नहीं।

मुझे लगता है कि कोई लुआ पैटर्न नहीं है जो आपकी स्ट्रिंग की हर संभव घटना से मेल खाता है, और कोई दूसरा नहीं, जिसका अर्थ है कि आपको किसी भी तरह से इसके आसपास काम करना चाहिए।

स्टुअर्ट, %d*%.?%d* द्वारा प्रस्तावित पैटर्न, सभी दशमलव संख्याओं (किसी बिंदु के साथ या बिना) से मेल खाता है, लेकिन यह खाली स्ट्रिंग से भी मेल खाता है, जो काफी उपयोगी नहीं है। %d+%.?%d* डॉट (या बिना किसी डॉट के) कम से कम एक अंक के साथ सभी दशमलव संख्याओं से मेल खाता है, %d*%d.?%d+ डॉट के बाद कम से कम एक अंक के साथ सभी दशमलव संख्याओं से मेल खाता है (या बिना डॉट के)। %.%d+ डॉट से पहले एक अंक के बिना दशमलव संख्या से मेल खाता है।

एक साधारण समाधान इन पैटर्नों में से एक से अधिक खोजना होगा (उदाहरण के लिए, %d+%.?%d* और %.%d+ दोनों), और परिणामों को गठबंधन करें। फिर उन स्थानों को देखें जहां आपने उन्हें पाया और देखें कि उनके बाद ']' है या नहीं।


मैंने frontier pattern के साथ थोड़ा सा प्रयोग किया।

पैटर्न %f[%.%d]%d*%.?%d*%f[^%.%d%]] मैचों सब दशमलव संख्या जो कुछ न अंकों और न ही बिंदु (या कुछ भी नहीं द्वारा) है कि से पहले, और पीछा कर रहे हैं कुछ है कि न तो ] है और न ही अंकों और न ही बिंदु (या कुछ भी नहीं द्वारा) द्वारा। यह भी एक बिंदु से मेल खाता है, हालांकि।

+1

यह [फ्रंटियर पैटर्न] (http://lua-users.org/wiki/FrontierPattern) है जो 5.1 में "अनौपचारिक और अनियंत्रित" है लेकिन लुआ 5.2 में होगा। – jpjacobs

+0

मैंने इसके बारे में पढ़ा है, लेकिन अभिव्यक्ति उपरोक्त फ्रंटियर पैटर्न का उपयोग कैसे करेगी? – Goles

+0

@jpjacobs: धन्यवाद, यह अच्छा लग रहा है। मैंने इसका उपयोग करके एक उदाहरण जोड़ा, लेकिन यह अभी भी काफी नहीं है। –

1

"%d*%.?%d+" दशमलव प्रारूप में सभी तरह की संख्या से मेल खाते हैं (ध्यान दें कि है कि किसी भी -1.1 या +3.14 के रूप में हस्ताक्षर किए इस तरह की संख्या को याद करने जा रहा है) होगा। आप संख्याएं देखने से पहले इस तरह उन्हें स्ट्रिंग से हटा देना चाहिए क्योंकि उदाहरणों कि ] के साथ समाप्त, से बचने के लिए एक और समाधान के साथ आने की आवश्यकता होगी:,

local pattern = "%d*%.?%d+" 
local clean = string.gsub(orig ,pattern .. "%]", "") 
return string.gmatch(clean, pattern) 
+0

क्या आपका पैटर्न खाली स्ट्रिंग से भी मेल नहीं खाता? –

+0

डी ओह, मैं ओपी के रेगेक्स से मेल खाता था, मैं इसके लिए जांचना भूल गया था। –

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