コンテンツ内の URL を一致させるための簡単な正規表現に行き詰まっています。目標は、「/folder/id/123」などのリンクからフォルダーを削除し、それらを「id/123」に置き換えて、同じフォルダー内の短い相対的なものにすることです。
実際に私はした
$pattern = "/\/?(\w+)\/id\/(\d)/i"
$replacement = "id/$2";
return preg_replace($pattern, $replacement, $text);
そしてそれはうまくいくようです。
しかし、私がやりたい最後のテストは、同じパターン /folder/id/123 も使用する外部サイトである場合、一致する各 URL に http:// が含まれていないことをテストすることです。
/[^http://] または (?<!html)... とさまざまなことを試しましたが、成功しませんでした。どんな助けでもとてもいいでしょう:-)
$pattern = "/(?<!http)\b\/?(\w+)\/id\/(\d)/i"; ???????
ありがとう !
ここにいくつかの例があります: ご協力ありがとうございます :-)
(these should be replaced, "same folder" => short relative path only)
<a href="/mysite_admin/id/414">label</a> ==> <a href="id/414">label</a>
<a href="/mYsITe_ADMIN/iD/29">label with UPPERCASE</a> ==> <a href="id/414">label with UPPERCASE</a>
(these should not be replaced, when there is http:// => external site, nothing to to)
<a href="http://mysite_admin/id/414">label</a> ==> <a href="http://mysite_admin/id/414">label</a>
<a href="http://www.google_admin.com">label</a> ==> <a href="http://www.google_admin.com">label</a>
<a href="http://anotherwebsite.com/id/32131">label</a> ==> <a href="http://anotherwebsite.com/id/32131">labelid/32131</a>
<a href="http://anotherwebsite_admin.com/id/32131">label</a> ==> <a href="http://anotherwebsite_admin.com/id/32131">label</a>