2013-03-18 5 views
5

को छोड़कर मुझे किसी अन्य को छोड़कर निर्दिष्ट वाक्यांश के साथ शुरू होने वाले कुछ यूआरएल को शामिल करने के लिए रेगेक्स लिखना कितना परेशानी हो रही है।रेगेक्स को एक चीज़ शामिल करने के लिए, लेकिन

हम उन पृष्ठों को साथ शुरू शामिल करना चाहते हैं:

/womens 
/mens 
/kids-clothing/boys 
/kids-clothing/girls 
/homeware 

लेकिन हम कुछ भी है कि URL में है/sXXXXXXX बाहर करना चाहते हैं - जहां एक्स के नंबर हैं।

मैंने नीचे दिए गए यूआरएल से मेल खाने के लिए अभी तक यह लिखा है लेकिन यह बहुत विचित्र व्यवहार कर रहा है। क्या मुझे लुकराउंड या कुछ इस्तेमाल करना चाहिए?

\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/boys|homeware).*[^s[0-9]+].* 

/homeware/bathroom/s2522424/4-tier-pastel-pop-drawers-approx-91cm-x25cm-x-28cm 
/homeware/bathroom/towels-and-bathmats 
/homeware/bathroom/towels-and-bathmats/s2506420/boutique-luxury-towels 
/homeware/bathroom/towels-and-bathmats?page=3&size=36&cols=4&sort=&id=/homeware/bathroom/towels-and-bathmats&priceRange[min]=1&priceRange[max]=14 
/homeware/bathroom?page=3&size=36&cols=4&sort=&id=/homeware/bathroom&priceRange[min]=1&priceRange[max]=35 
/homeware/bedroom 
/homeware/bedroom/bedding-sets 
/homeware/bedroom/bedding-sets/s2471012/striped-reversible-printed-duvet-set 
/homeware/bedroom/bedding-sets/s2472706/check-printed-reversible-duvet-set 
/homeware/bedroom/bedding-sets/s2475332/union-jack-duvet-set 
/kids-clothing/boys/shop-by-age/toddler-3mnths-5yrs/s2520246/boys-lollipop-slogan-t-shirt 
/kids-clothing/boys/shop-by-age/toddler-3mnths-5yrs/s2520253/boys-2-pack-dinosaur-t-shirts 
/kids-clothing/girls/great-value/sale?page=1&size=36&cols=4&sort=price.asc&id=/kids-clothing/girls/great-value/sale&priceRange[min]=0.5&priceRange[max]=7 
/kids-clothing/girls/mini-shops/ballet-outfits 
/kids-clothing/girls/shop-by-age/baby--newborn-0-18mths 
/kids-clothing/girls/shop-by-age/baby--newborn-0-18mths/s2484120/3-pack-frill-pants-pinks 
/kids-clothing/girls/shop-by-age/baby--newborn-0-18mths/s2504431/3-pack-l-s-bodysuit 
/mens/categories/tops?page=5&size=36&cols=4&sort=&id=/mens/categories/tops&priceRange[min]=2&priceRange[max]=22.5 
/mens/categories/trousers-and-chinos 
/mens/categories/trousers-and-chinos/s2438566/easy-essential-cuffed-jogging-bottoms 
/mens/categories/trousers-and-chinos/s2438574/easy-essential-cuffed-jogging-bottoms 
/mens/categories/trousers-and-chinos/s2458939/regatta-zip-off-lightweight-outdoor-trousers 
+1

संभावित डुप्लिकेट: http://stackoverflow.com/questions/3792367/excluding-strings-using-regex?rq=1 – m4573r

+0

आप किस नियमित अभिव्यक्ति इंजन का उपयोग कर रहे हैं? –

उत्तर

2

आप सही रास्ते पर हैं। स्ट्रिंग के शुरू करने के

"^(?!.*\/s\d+)\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/girls|homeware)\/.*" 

^ एंकर: एक नकारात्मक अग्रदर्शी यह करना होगा। (?!.*\/s\d+) का अर्थ है कि "/sXXXXXXX" स्ट्रिंग में कहीं भी दिखाई नहीं दे सकता है, और बाकी यह आपके आवश्यक प्रारंभिक टोकन से मेल खाता है।

कारण [^s[0-9]+] काम नहीं किया गया है [^xyz] केवल एक ही चरित्र से मेल खाता है। आप प्रभावी ढंग से कह रहे हैं कि आप किसी भी चरित्र की तलाश में हैं जो "s", "[" और "0-9" का कोई संयोजन नहीं है, इसके बाद "]" है। जैसे "s[234[s]"

स्ट्रिंग की शुरुआत में आपको अपना नकारात्मक दिखने की आवश्यकता है, इसलिए कुछ भी मेल नहीं खाता है। यदि आप \/(womens|mens|kids\-clothing\/boys|kids\-clothing\/girls|homeware)\/.* के बाद इसे डालते हैं, तो आप "/sXXXXXXX" से पहले भी सफलतापूर्वक मिलान करेंगे। यानी आपके डेटा के लाइन 1 के लिए, आप "/ होमवेयर/बाथरूम /" से मेल खाते हैं।

+0

बहुत बढ़िया, पूरी तरह से काम करता है! स्पष्टीकरण के लिए भी बहुत बहुत धन्यवाद ... मेरे सिर को लपेटने में थोड़ा कठिनाई हो रही थी कि कैसे दिखता है। – Ryan

1

हाँ, आप एक नकारात्मक lookaround की जरूरत है:

/^\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/boys|homeware)(?:\/(?:(?!s\d+).)*)+$/gm 

आप एक बार जब आप बहु (एम) ध्वज की जरूरत नहीं है में एक पंक्ति तुलना कर रहे हैं। यह शायद अजीब तरीके से व्यवहार कर रहा है क्योंकि आपके पास एक वर्ग वर्ग (स्क्वायर ब्रैकेट्स द्वारा दर्शाया गया था) अधिक स्क्वायर ब्रैकेट के अंदर घोंसला था, जो काम नहीं करता है; आप चरित्र वर्गों घोंसला नहीं कर सकते हैं। यह परीक्षण किया गया था और refiddle पर काम करता है।

+0

यह सभी प्रदत्त इनपुट के लिए असफल हो जाएगा। –

+0

नकारात्मक। जैसा कि मैंने देखा, मैंने इसे रेफ्रिड पर परीक्षण किया और यह सही ढंग से काम किया। क्या तुमने कोशिश की? – Adrian

+0

हाँ आप सही हैं। मैंने आपके उत्तर के अंत में '+' को याद किया। माफ़ कीजिये। +1। मेरी रक्षा में, मैं बस जाग गया था। –

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