2011-12-04 15 views
38

मैं पिछले बैकस्लैश के बाद अंतिम भाग को पकड़ने के लिए
मैं \Web_ERP_Assistantरेगेक्स अंतिम घटना?

मेरा विचार (\ के साथ) की जरूरत है कोशिश कर रहा हूँ था:

C:\Projects\Ensure_Solution\Assistance\App_WebReferences\Web_ERP_WebService\Web_ERP_Assistant 


\\.+?(?!\\)  // I know there is something with negative look -ahead `(?!\\)` 

लेकिन मैं यह नहीं मिल रहा ।

[Regexer Demo]

+1

मुझे लगता है कि आपके सवाल का regexes से संबंधित सराहना करते हैं, लेकिन आप यकीन है कि यह यहाँ का उपयोग करने के लिए सबसे अच्छा उपकरण है कर रहे हैं? अधिकांश मानक पुस्तकालयों में एक विधि होगी जो किसी दिए गए निर्देशिका में अंतिम पथ नाम पुनर्प्राप्त करेगी। यह भी ध्यान में रखता है कि निर्देशिका विभाजक किसी दिए गए ओएस पर क्या है। –

+0

@Raskolnikov मुझे रेगेक्स में इसकी आवश्यकता है। मुझे Pth.getFileNameWithoutExtension पता है। प्रश्न को रेगेक्स –

+1

के रूप में टैग किया गया है, ठीक है, बस सुनिश्चित करें। मैं इसे फिर से regexes में लोगों को अधिक कुशल छोड़ देंगे। –

उत्तर

38

आपके नकारात्मक अग्रदर्शी समाधान होगा उदा इस हो:

\\(?:.(?!\\))+$ 

यह here on Regexr

+0

'?:' ' ??????? –

+0

अगर मैं मल्टीलाइन को हटा देता हूं - यह काम नहीं करेगा। ऐसा क्यों है ? –

+0

'(?:' एक गैर कैप्चरिंग समूह की शुरुआत है। '.' कोई चरित्र है, यह किसी भी चरित्र की जांच करता है यदि उसके बाद' \ ' – stema

19

आप स्ट्रिंग के अंत करने के लिए इसे \\[^\\]*$ तरह प्रस्तोता, कुछ कोशिश कर सकते हैं। हालांकि मुझे यकीन नहीं है कि अगर किसी को पूरी तरह से कार्य के लिए regexp का उपयोग करना है।

+1

यह मेरे लिए बहुत अच्छा काम करता है। '([^ \ /] *) $' लिनक्स बॉक्स के लिए पथ में फ़ाइल नाम से मेल खाता है। क्या आप व्याख्या कर सकते हैं कि इस संदर्भ में कैरेट '^' कैसे काम करता है? मैंने स्ट्रिंग की शुरुआत को इंगित करने के लिए कभी भी इसका इस्तेमाल किया है। – Brad

+0

@ ब्रैड, यह अस्वीकार है। मतलब '[^ \ /]' '/' को छोड़कर किसी भी चरित्र से मेल खाता है। –

1

क्या इस regex के बारे में: \\[^\\]+$

+0

मैं डाउनवोट नहीं करता, लेकिन ओपी ने कहा "\\' "के साथ। –

+0

ठीक है मुझे नहीं लगता कि रेगेक्स में होना चाहिए। लेकिन मैं अपना उत्तर – SERPRO

+0

त्रुटि संपादित करूंगा ... मुझे नहीं लगता कि यह बिल्कुल रेगेक्स होना चाहिए, लेकिन निश्चित रूप से इसे शामिल करने के लिए मैच के लिए, यह होना चाहिए। यह महत्वपूर्ण नहीं है, मैंने सोचा है कि क्या हो सकता है यह देखने के बाद आपके जवाब के बारे में गलत हो गया था कि यह कम हो गया था और यही वह था जिसके साथ मैं आया था, इसलिए मैंने टिप्पणी की। –

22

देखें आगे एक नकारात्मक नज़र एक सही जवाब है, लेकिन यह अधिक सफाई से की तरह लिखा जा सकता है:

(\\)(?!.*\\) 

यह \ की एक घटना के लिए लग रहा है और फिर एक चेक में जो मेल नहीं खाता है, यह उस चरित्र के बाद किसी भी संख्या के पात्रों की तलाश करता है जिसे आप देखना नहीं चाहते हैं। क्योंकि यह नकारात्मक है, यह केवल तभी मेल खाता है जब उसे कोई मिलान नहीं मिलता है।

+1

में '.'' होने पर यह असफल प्रतीत होता है यह अंतिम बैकस्लैश * केवल * से मेल खाता है। ओपी भी इसके बाद सब कुछ मैच करना चाहता है। –

11

एक यह है कि मेरे लिए काम किया था:

.+(\\.+)$ 

Try it online!

स्पष्टीकरण:

.+  - any character except newline 
(  - create a group 
\\.+ - match a backslash, and any characters after it 
)  - end group 
$  - this all has to happen at the end of the string 
+3

भागों के टूटने के लिए धन्यवाद :) –

+1

$ - लाइन का अंत नहीं है, इसका मतलब स्ट्रिंग का अंत है। – rayzinnz

1

मैं जब एक \

द्वारा अपने समाप्त हो गया है कि परिणाम भी प्राप्त करने के लिए रेगुलर एक्सप्रेशन से नीचे का इस्तेमाल किया
(\\[^\\]+)\\?$ 

[Regex Demo]

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