2010-10-20 14 views
15

मुझे एक रेगेक्स चाहिए जो स्ट्रिंग में सबकुछ और आखिरी \ या/सहित समेत पाएगा।अंतिम आगे या पिछड़े स्लैश से पहले सब कुछ के लिए Regex

उदाहरण के लिए, c: \ निर्देशिका \ file.txt ग में परिणाम चाहिए: \ निर्देशिका \

उत्तर

39

इस प्रयास करें: (Rubular)

/^(.*[\\\/])/ 

स्पष्टीकरण:

 
^  Start of line/string 
(  Start capturing group 
.*  Match any character greedily 
[\\\/] Match a backslash or a forward slash 
)  End the capturing group 

मिलान किया स्लैश .* की लालच की वजह से आखिरी व्यक्ति होगा।

यदि आपकी भाषा इसका समर्थन करती है (या इसकी आवश्यकता है), तो आप नियमित अभिव्यक्ति के लिए / से भिन्न डिलीमीटर का उपयोग करना चाह सकते हैं ताकि आपको आगे-स्लैश से बचने की आवश्यकता न हो।

इसके अलावा, अगर आप फ़ाइल पथों को पार्स कर रहे हैं तो आपको शायद पता चलेगा कि आपकी भाषा में पहले से ही एक पुस्तकालय है जो यह करता है। यह एक नियमित अभिव्यक्ति का उपयोग करने से बेहतर होगा।

+1

+ ** के लिए 1 ... आपको शायद पता चलेगा कि आपकी भाषा में पहले से ही एक पुस्तकालय है जो यह करता है ... ** –

0

आप उपयोग कर रहे हैं sed उदाहरण के लिए, आप पिछले स्लैश से पहले उत्पादन सब कुछ करने के लिए ऐसा कर सकता है:

echo "/home/me/documents/morestuff/before_last/last" | sed s:/[^/]*$:: 

यह होगा उत्पादन:

/home/me/documents/morestuff/before_last 
संबंधित मुद्दे