1

リンクを一致させる必要がありますが、文字列[image:x]で始まらない人だけです。xはリンク自体です。

適合するリンクのみが変更されるように、preg_replaceでこれが必要です。次に例を示します。

「犬が私の本http://mysite.com/dog.jpgを食べたことがあり、店https://www.mysite.com/images/store.pngに行って新しいiPadを買わ なければなりませんでしたapple.com/iPad/iPadMini.jpg 。そこでは楽しかったです[ image:http://apple.com/iPad/images/iPads.com]」

結果は次のようになります

「犬が私の本[image:http://mysite.com/dog.jpg]を食べたことがあり、店[image:https://www.mysite.com/images/store.png]に行って新しいiPadを買わ なければなりませんでした[image:apple.com/iPad/iPadMini.jpg] 。そこでは楽しかったです[ image:http://apple.com/iPad/images/iPads.com]」

最後のリンクに注意してください。今のところ、2倍になっています(リンクはまだpreg_replaceによって取得されています)。ここのように(望ましい効果ではなく、手つかずのままにする必要があります):

...[image:apple.com/iPad/iPadMini.jpg] そして、楽しかったです
[ image:[image:http://apple.com/iPad/images/iPads.com]]"

これが今のところ私のpreg_replaceです:

preg_replace('~(https?://)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\S*)\.(jpg|png|jpeg|bmp|gif)~','[[image:$0]]',$text);
4

1 に答える 1

1

ネガティブルックビハインドを使用できます。

'[image:'で始まることは望ましくありません。また、言葉の途中から始めたくありません。これはを使用して防止され\bます。文字列がで始まる場合はhttp://、一致に含める必要があるため、http://またはの後に一致させないでくださいhttps://

preg_replace('~(?<!\[image:)(?<!http://)(?<!https://)(?<!\w\.)(https?://)?\b[\w-]+(\.[\w-]+)+\.?(:\d+)?(\S*)\.(jpg|png|jpeg|bmp|gif)~','[image:$0]',$text);

このPHPフィドルを確認してください

注:これも、文字列を。の]ように最後に欠落している文字列に置き換えることはありません[image:example.com

于 2013-02-05T15:38:21.660 に答える