2011-03-25 22 views
12

मैं एक स्ट्रिंग जो सबस्ट्रिंगregex स्ट्रिंग सबस्ट्रिंग

सबस्ट्रिंग मैं चाहता हूँ शामिल नहीं है

मेरे स्ट्रिंग हमेशा शुरू होता है "http://www.domain.com/" मैच के लिए कोशिश कर रहा हूँ शामिल नहीं है

: मैचों से बाहर करने के लिए "ए /" जो (डोमेन नाम में एक फ़ोल्डर नाम) के बाद स्ट्रिंग आता

वहाँ स्ट्रिंग में वर्णों-स्ट्रिंग के बाद मैं

उदाहरण के लिए बाहर करना चाहते हो जाएगा

"http://www.domain.com/.a/test.jpg"

मिलान नहीं किया जाना चाहिए लेकिन "http://www.domain.com/test.jpg" होना चाहिए

उत्तर

25

के रूप में एक नकारात्मक अग्रदर्शी दावे का उपयोग करें:

^http://www\.domain\.com/(?!\.a/).*$ 

Rubular Link

हिस्सा (?!\.a/) कुछ भी मेल खाता है .a/

+0

भूल गया था अगर मैं एक उद्धरण चिह्न (") के साथ मैच खत्म करना चाहता हूं? जैसा कि मैं HTML के माध्यम से खोज रहा हूं। –

0

मैं

^http:\/\/www\.domain\.com\/([^.]|\.[^a]).*$ 

आप अपने डोमेन से मेल खाना चाहते हैं, साथ ही साथ जो कुछ भी जारी नहीं है, उसके साथ प्रयास करेंगे। और सब कुछ जो एक के साथ जारी है। लेकिन a नहीं। (अंत में आप बाद में जोड़ सकते हैं/यदि आवश्यक हो)

+1

यह ठीक है - जब तक * अन्य * प्रोग्रामर को इसे विस्तारित करने के लिए कहा जाता है .b, .c और .whatElsethemanagementdoesnotwant – Ingo

+0

हाँ ... मुझे वह @Ingo मिलता है। बीटीडब्ल्यू मैं \ पहले/ –

5

ऐसे मामलों में मेरी सलाह नकारात्मक जटिल दावे या ऐसी सामग्री के साथ अत्यधिक जटिल regexes का निर्माण नहीं है।
इसे सरल और बेवकूफ रखें!
दो मैचों में से एक, पॉजिटिव के लिए, और बाद में नकारात्मक (या दूसरी तरफ) को हल करें। अधिकांश समय, अगर छोटे नहीं होते हैं, तो रेगेक्स आसान हो जाते हैं। और आपका प्रोग्राम स्पष्ट हो जाता है।
उदाहरण के लिए, foo के साथ सभी लाइनों को निकालने के लिए, लेकिन foobar नहीं, मैं का उपयोग करें:

grep foo | grep -v foobar 
0

के अलावा यदि आप आगे देखने का उपयोग नहीं करते हैं, लेकिन बस सरल रेगुलर एक्सप्रेशन से, आप बस, अगर यह आपके डोमेन से मेल खाता है, लेकिन एक .a/

<?php 

function foo($s) { 

    $regexDomain = '{^http://www.domain.com/}'; 
    $regexDomainBadPath = '{^http://www.domain.com/\.a/}'; 

    return preg_match($regexDomain, $s) && !preg_match($regexDomainBadPath, $s); 
} 

var_dump(foo('http://www.domain.com/')); 
var_dump(foo('http://www.otherdomain.com/')); 

var_dump(foo('http://www.domain.com/hello')); 
var_dump(foo('http://www.domain.com/hello.html')); 
var_dump(foo('http://www.domain.com/.a')); 
var_dump(foo('http://www.domain.com/.a/hello')); 
var_dump(foo('http://www.domain.com/.b/hello')); 
var_dump(foo('http://www.domain.com/da/hello')); 

?> 

नोट के साथ मेल नहीं खाता है कि http://www.domain.com/.a टेस्ट पास जाएगा क्योंकि यह / साथ अंत नहीं है कह सकते हैं,।

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