2010-03-20 17 views
6

मेरे पास छवियों में मुस्कुराहट बदलने के लिए regexp है। यहाँ यहregexp बहिष्करण

(?:(?![0]:\)|:\)\)|:-\)\)))(:\)|:-\)) 

है बिंदु 0 :) बदल रहा है नहीं करने के लिए और :)) और :-)) जबकि बदलते :) और :-) यह साथ :) बहुत अच्छी तरह से काम करता है) और :-)) लेकिन किसी भी तरह अभी भी पकड़ लेता है :) 0 :)

मेरी गलती कहां है?

उत्तर

5

तो तुम :) और :-) मिलान करना चाहते हैं, लेकिन वे एक और ) द्वारा 0 से पहले नहीं किया जाना चाहिए या पीछा किया? तो फिर इस पद्धति है:

$ echo ':) :-) ok 0:) :)) :-)) 0:-)) 0:-) :)' | \ 
> perl -lne'print $1 while /(?<!0)(:-?\))(?!\))/g' 
:) 
:-) 
+0

मैं पर्ल में उदाहरण शामिल किए हैं:

(?<!0):-?\)(?!\)) 

मूल रूप से यह

(?<!0) : negative lookbehind; must not be preceded by 0 :-?\) : smiley with optional nose (?!\)) : negative lookforward; must not be followed by) 

उदाहरण है। – jfs

+0

ओह हाँ, आपको regexp गुरु होना चाहिए। यह ठीक काम करता है, धन्यवाद! – Vlad