2013-03-06 9 views
7

के साथ मैं एक साधारण स्ट्रिंग मैनिपुलेशन बनाने की कोशिश कर रहा हूं: विस्तार के बिना फ़ाइल का नाम प्राप्त करना।ढूँढना '।' string.find()

s = 'crate.png' 
i, j = string.find(s, '.') 
print(i, j) --> 1 1 

और केवल डॉट्स के साथ: केवल, string.find() डॉट्स के साथ एक मुद्दा है लगता है

s = 'crate.png' 
i, j = string.find(s, 'p') 
print(i, j) --> 7 7 

एक बग है कि है, या मैं कुछ गलत कर रहा हूँ?

+0

सी [lua में वर्ग कोष्ठक चरित्र string.find कैसे] (http://stackoverflow.com/questions/6077423/how-to-string-find-the-square-bracket- चरित्र-इन-lua)। हालांकि यह एक अलग विशेष चरित्र को संदर्भित करता है, समाधान एक जैसा है। – finnw

उत्तर

14

string.find(), डिफ़ॉल्ट रूप से, तारों में तार नहीं मिलते हैं, यह तारों में patterns पाता है। लिंक पर अधिक पूर्ण जानकारी मिल सकती है, लेकिन यहां प्रासंगिक हिस्सा है;

'।' एक वाइल्डकार्ड चरित्र का प्रतिनिधित्व करता है, जो किसी भी चरित्र का प्रतिनिधित्व कर सकता है।

वास्तव में स्ट्रिंग . ढूंढने के लिए, अवधि एक प्रतिशत चिह्न के साथ भाग जाने की आवश्यकता है, %.

संपादित करें: इसके अलावा, आप, कुछ अतिरिक्त तर्क में पारित कर सकते हैं find(pattern, init, plain) जो आप के रूप में true में पारित करने के लिए अनुमति देता है एक अंतिम तर्क और सादे तारों के लिए खोज। यह आपका बयान देगा;

> i, j = string.find(s, '.', 1, true) -- plain search starting at character 1 
> print(i, j) 
6 6 
+1

-1; लुआ [पैटर्न] के लिए भागने का चरित्र (http://www.lua.org/manual/5.2/manual.html#6.4.1) '%' है, न कि '\'। बैकस्लैश का उपयोग करने का प्रयास करने से शायद आपको "अमान्य भागने अनुक्रम" त्रुटि मिल जाएगी। – hugomg

+0

@missingno आप निश्चित रूप से सही हैं, मैंने भागने के दृश्यों और पैटर्न के लिए भागने वाले चरित्र को मिश्रित किया। जवाब तय किया गया। –

+0

ओह। धन्यवाद। यह मेरे दिमाग को कभी पार नहीं किया। :-) – user2141781

7

या तो string.find(s, '%.') या string.find(s, '.', 1, true)

3

अन्य उत्तर पहले से ही समझा दिया है कि क्या गलत है क्या। पूर्णता के लिए, यदि आप केवल फ़ाइल के मूल नाम में रुचि रखते हैं तो आप string.match का उपयोग कर सकते हैं। उदाहरण के लिए:

string.match("crate.png", "(%w+)%.") --> "crate" 
संबंधित मुद्दे