रेगेक्स अंतिम घटना?


122

मैं अंतिम भाग को पकड़ने की कोशिश कर रहा हूं, अंतिम बैकलैश के बाद
मुझे \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]


2
मैं सराहना करता हूं कि आपका प्रश्न regexes से संबंधित है, लेकिन क्या आप सुनिश्चित हैं कि यह यहां उपयोग करने के लिए सबसे अच्छा उपकरण है? अधिकांश मानक पुस्तकालयों में एक विधि होगी जो किसी दिए गए निर्देशिका में अंतिम पथ नाम को पुनः प्राप्त करेगी। यह इस बात को भी ध्यान में रखता है कि किसी दिए गए OS पर डायरेक्टरी सेपरेटर क्या है।
स्टीव रूकट्स

@ रस्कोलनिकोव मुझे रेगेक्स में चाहिए। मैं Pth.getFileNameWithoutExtension को जानता हूं। The Question को regex
Royi Namir

2
ठीक है, काफी उचित है, बस सुनिश्चित कर रहा हूं। मैं इसे फिर से रेक्सक्स में और अधिक कुशल लोगों के लिए छोड़ दूँगा।
स्टीव रूकट्स

जवाबों:


95

आपका नकारात्मक लुकहेड समाधान यह होगा:

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

Regexr पर इसे यहाँ देखें


2
(?:एक गैर कैप्चरिंग समूह की शुरुआत है। .किसी भी चरित्र है, यह जाँच करता है किसी भी चरित्र अगर यह एक `` द्वारा पीछा नहीं कर रहा है।
स्टेमा

मल्टी लाइन केवल Regexr परीक्षण के लिए आवश्यक है। यह का अर्थ बदल जाता है $। मानक स्ट्रिंग का अंत है, पंक्ति के इसके अंत में बहुपरत के साथ। क्योंकि Regexr में परीक्षण पाठ में कई पंक्तियाँ हैं जिन्हें मुझे वहाँ इस विकल्प की आवश्यकता है।
स्टेमा

क्या होगा अगर मैं अपने मूल प्रश्न के रूप में एक ही प्रतिक्षेप चाहता हूं, लेकिन शुरुआत में \ _ के बिना?
रॉय नमिर

2
(?:[^\\/](?!(\\|/)))+$शुरुआत में स्लैश को हटाता है और आगे और पीछे दोनों स्लैश के साथ मुकाबला करता है। यह किसी भी स्लैश के बिना पथों के
mrswadge

5
एक टेम्पर्ड लालची टोकन में, डॉट हमेशा लुकहेड के बाद आना चाहिए (?:(?!\\).)+:। ( रेफरी ) इसके अलावा, RegExr पर आपका उदाहरण पथ के घटकों को अलग करने के लिए दो बैकस्लैश का उपयोग करता है; केवल एक ही होना चाहिए, और रेगेक्स केवल एक से मेल खाना चाहिए । ( डेमो )
एलन मूर

62

मेरे लिए काम करने वाला एक व्यक्ति था:

.+(\\.+)$

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

.+     - 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

16
भागों के टूटने के लिए धन्यवाद :)
जेसन ब्रूस

1
मैं विशेष रूप से एक रेगेक्स की तलाश कर रहा था जो अंतिम फॉरवर्ड स्लैश (/) से मेल खाता हो। @Stema द्वारा ऊपर दिए गए स्वीकृत उत्तर को बदल देता है, जब बैकस्लैश को आगे स्लैश के साथ बदल दिया जाता है। आपकी स्लैश के बाद सब कुछ मेल खाता है, जो वास्तव में हल नहीं है। मैंने आपके उत्तर को रद्द कर दिया क्योंकि आपका स्पष्टीकरण सुसाइड कर रहा था, हालाँकि आपका समाधान वास्तव में काम नहीं कर रहा था
चिदोजी नेनाचोर

यह इतना सरल है और आम तौर पर एक नकारात्मक रूपांतर से बेहतर है, जब तक यह एक पंक्ति पर निर्बाध है, क्यों ओवरक्लंप्लिकेट?
स्कॉट एंडरसन

42

आगे एक नकारात्मक रूप एक सही उत्तर है, लेकिन इसे और अधिक सफाई से लिखा जा सकता है जैसे:

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

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


4
यह अंतिम बैकस्लैश से ही मेल खाता है । ओपी इसके बाद भी सब कुछ मैच करना चाहता है।
एलन मूर

बहुत मददगार, यह क्लीनर संस्करण, हालांकि केवल बैकस्लैश को कैप्चर करने से, सब कुछ क्लिक हो गया। धन्यवाद।
मैट बिनफोर्ड

28

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


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

@ ब्रैड, यह नकार है। मतलब [^\/]किसी भी पात्र से मेल खाता है /
माइकल क्रेलिन - हैकर

9

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


वैसे मुझे नहीं लगता कि रेगेक्स में होने की जरूरत है। लेकिन मैं अपने जवाब को संपादित करूँगा
SERPRO

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

@michael, मुझे गलत न समझें मैं आपकी टिप्पणी की सराहना करता हूं, मुझे लगा कि इसे regex the पर जोड़ना जरूरी नहीं है;)
SERPRO

5

यदि आप बैकस्लैश को शामिल नहीं करना चाहते हैं, लेकिन इसके बाद केवल पाठ, यह प्रयास करें: ([^\\]+)$या यूनिक्स के लिए:([^\/]+)$


2

मैंने उस परिणाम को प्राप्त करने के लिए regex के नीचे उपयोग किया, जब इसके द्वारा समाप्त हो गया \

(\\[^\\]+)\\?$

[Regex Demo]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.