2016-05-07 21 views
1

ですべての部分を交換してください。私はこれをしようとしていますREGEXP_REPLACEは、私は、このような文字列を持っているテキスト

aa/ss/[img]aa/WW/dd[/img][img]aa/WW/dd[/img]aa/ss

:結果がでなければなりません

select regexp_replace('aa/ss/[img]aa/ss/dd[/img][img]aa/ss/dd[/img]aa/ss', '(\[img\].*/)ss(/.*\[\/img\])', '\1WW\2', 'g')

しかし、これは単なる一枚ではなく、両方を置き換えます。私は'g'フラグbuth同じ結果を使用します。

これを正しく行うにはどうすればよいですか?

+0

HTMLや正規表現... http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-:それはちょうど、アカウントに'['文字を取りますtags/1732454#1732454 –

答えて

2

問題はオペレータの「貪欲」です。 ssは、'[/img][img].*または固定パターンとの一致としてカウントされるかどうかによって、1回または2回パターンに一致するように式を繰り返しました。

残念ながら、問題を解決するよりも問題を診断する方が簡単です。正規表現では欲求が紛らわしいと感じます。しかし、ここにあなたの特定の文字列の修正があります。

select regexp_replace('aa/ss/[img]aa/ss/dd[/img][img]aa/ss/dd[/img]aa/ss', 
         '(\[img\][^[]*/)ss(/[^[]*\[\/img\])', 
         '\1WW\2', 
         'g') 
関連する問題