URL अंत-लाइन या "/" वर्ण से मिलान करने के लिए Regex


80

मेरे पास एक URL है , और मैं कुछ समूहों को बाहर निकालने के लिए इसे नियमित अभिव्यक्ति से मिलाने की कोशिश कर रहा हूं। मेरे पास जो समस्या है वह यह है कि URL "/" और अधिक URL टेक्स्ट के साथ समाप्त हो सकता है या जारी रह सकता है । मैं इस तरह से URL का मिलान करना चाहूंगा:

लेकिन कुछ इस तरह से मेल नहीं खाता:

तो, मुझे लगा कि मेरी सबसे अच्छी शर्त कुछ इस तरह थी:

/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]

जहां अंत में वर्ण वर्ग या तो "/" या अंत पंक्ति होता है। वर्ण वर्ग हालांकि "$" से खुश नहीं है। मैं सही समूहों को वापस खींचने के दौरान इन URL के बीच सबसे अच्छा भेदभाव कैसे कर सकता हूं?

जवाबों:


41
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$

1 कैप्चरिंग ग्रुप (.+)

.+ किसी भी चरित्र से मेल खाता है (लाइन टर्मिनेटर को छोड़कर)

  • + क्वांटिफायर - एक और असीमित समय के बीच मेल खाता है , जितनी बार संभव हो उतनी बार वापस दे रहा है (लालची)

दूसरा कैप्चरिंग ग्रुप (\d{4}-\d{2}-\d{2})

\d{4}एक अंक से मेल खाता है (बराबर [0-9])

  • {4} क्वांटिफायर - मिलान 4 बार

-अक्षर का -शाब्दिक रूप से मिलान (केस संवेदी)

\d{2}एक अंक से मेल खाता है (बराबर [0-9])

  • {2} क्वांटिफायर - बिल्कुल 2 बार मेल खाता है

-अक्षर का -शाब्दिक रूप से मिलान (केस संवेदी)

\d{2}एक अंक से मेल खाता है (बराबर [0-9])

  • {2} क्वांटिफायर - बिल्कुल 2 बार मेल खाता है

-अक्षर का -शाब्दिक रूप से मिलान (केस संवेदी)

तीसरा कैप्चरिंग ग्रुप (\d+)

\d+एक अंक से मेल खाता है (बराबर [0-9])

  • + क्वांटिफायर - एक और असीमित समय के बीच मेल खाता है , जितनी बार संभव हो उतनी बार वापस दे रहा है (लालची)

चौथा कैप्चरिंग ग्रुप (.*)?

? क्वांटिफायर - शून्य और एक बार के बीच मेल खाता है , जितनी बार संभव हो उतनी बार वापस दे रहा है (लालची)

.*किसी भी चरित्र से मेल खाता है (लाइन टर्मिनेटर को छोड़कर)

  • * क्वांटिफायर - शून्य और असीमित समय के बीच मेल खाता है , जितनी बार संभव हो उतनी बार वापस दे रहा है (लालची)

$ स्ट्रिंग के अंत में स्थिति का दावा करता है


126

सामग्री के / या अंत से मेल खाने के लिए, का उपयोग करें (/|\z)

यह केवल तभी लागू होता है जब आप मल्टी-लाइन मैचिंग का उपयोग नहीं कर रहे होते हैं (यानी आप एक URL से मेल खा रहे हैं, URL की नई-सीमांकित सूची नहीं)


आपके पास जो कुछ भी था उसके एक अद्यतन संस्करण के साथ रखने के लिए:

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z)

ध्यान दें कि मैंने \S+?कुछ भी और सब कुछ ( .*) मिलान करने के बजाय गैर-व्हाट्सएप ( ) के लिए एक गैर-लालची मैच होना शुरू कर दिया है


6
मैं आपको अधिक बिंदु कैसे दे सकता हूं;) इसके लिए धन्यवाद। बस दस्तावेज़ (/ | \ A) आगे स्लैश या स्ट्रिंग की शुरुआत से मेल खाएगा।
सेनिका गोंजालेज 19

आपके नए गोल्ड उत्तर बैज पर बधाई;) - बस एहसास हुआ कि मैंने आपको 100 पर धकेल दिया है।
random_user_name 20

63

अब आपको कुछ युगल मिल गए हैं, जो आप चाहते हैं कि वह पर्याप्त रूप से कवर हो जाए।

क्या उल्लेख नहीं किया गया है यही कारण है कि अपने प्रयास करेंगे काम नहीं: अंदर एक चरित्र वर्ग, $(और साथ ही ^, .और /) कोई विशेष अर्थ नहीं है, इसलिए [/$]मैचों या तो एक शाब्दिक /या एक शाब्दिक $बजाय regex समाप्त ( /) या मिलान अंत का लाइन ( $)।


8
यह कुछ ऐसा है जिसे अक्सर भूल जाते हैं और रेगेक्स डॉक्स में उल्लेख नहीं किया जाता है।
स्टीव डन

6
ध्यान दें कि ^ चरित्र वर्ग में विशेष अर्थ हो सकता है। यदि यह कक्षा का पहला चरित्र है, तो यह इसे एक नकारात्मक वर्ग बनाता है जो अन्य वर्णों को छोड़कर किसी भी चीज़ से मेल खाएगा। उदाहरण के लिए, एक या बी को छोड़कर कुछ भी मिलान करने के लिए, आप [^ ab] का उपयोग कर सकते हैं। शाब्दिक ^ को शामिल करने के लिए, बस यह सुनिश्चित करें कि यह पहले नहीं है, इसलिए या तो a, b या ^ से मेल खाने के लिए आप [ab ^] का उपयोग करेंगे।
डेविड मेसन

18

रूबी और बैश में, आप $कोष्ठक के अंदर उपयोग कर सकते हैं ।

/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)

(यह समाधान पीट बॉटन के समान है, लेकिन उपयोग के $बजाय लाइन के \zअंत का अर्थ है, जिसका उपयोग स्ट्रिंग के अंत का मतलब है, के संरक्षण को संरक्षित करता है ।)


2
PHP भी जो मैं बता सकता हूँ। मुझे लगता है कि वास्तव में किसी भी कार्यान्वयन $में कोष्ठक ()में उपयोग नहीं किया जा सकता है । यह कोष्ठक []है जो इसे शाब्दिक बनाता है।
जोएल मेलन

3
$जावास्क्रिप्ट में इस तरह से काम करता है, जबकि \z(क्रोम 48, फ़ायरफ़ॉक्स 43, IE9) नहीं करता है।
Vsevolod Golovanov

1
यह सबसे सीधा-सीधा विकल्प है। मैच स्लैश या एंड-ऑफ-लाइन। यह इस प्रश्न के शीर्षक से भी मेल खाता है!
ब्रेट डोनाल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.