Я создал плагин, который превращает ссылки в встроенную версию содержимого Facebook по ссылке. Моя проблема в том, что если я отключу часть плагина для комментариев, ссылки на комментарии станут встроенными сообщениями (если часть сообщения плагина все еще активна).различают две почти идентичные ссылки в regex
Давайте посмотрим, поэтому у нас есть 3 ссылки:
Facebook Опубликовать
<a href="https://www.facebook.com/zuck/posts/10102577175875681" target="_blank">ONE</a>
Комментарий
<a href="https://www.facebook.com/zuck/posts/10102577175875681?comment_id=1193531464007751" target="_blank">Two</a>
и ответ на комментарий
<a href="https://www.facebook.com/zuck/posts/10102577175875681?comment_id=1193531464007751&reply_comment_id=10102577641662241" target="_blank">Three</a>
с все три lin кс, начиная с
https://www.facebook.com/zuck/posts/10102577175875681
В следующем коде, если условия являются мои настройки переключается, и этот пост сообщение равно то, что посты пользователя, поэтому в данном примере это сообщение сообщение равно трем ссылкам выше.
Это плагин, который я создал для преобразования этих ссылок.
if ($this->registry->options['drcae_facebook_comment_onoff']) {
// swaps facebook comment links to embed code
$drc_embed_facebook_cmt = '<div class="fb-comment-embed" data-include-parent="true" data-width="560" data-href="https://www.facebook.com/$3/posts/$4comment_id=$5"></div>';
$this->post['message'] = preg_replace('~<a (.*)href="(.*)facebook.com/(.*)/posts/(.*)?comment_id=(.*)"(.*)<\/a>~', $drc_embed_facebook_cmt, $this->post['message']);
}
if ($this->registry->options['drcae_facebook_post_onoff']) {
// swaps facebook post links to embed code
$drc_embed_facebook_post = '<div class="fb-post" data-href="https://www.facebook.com/$3/posts/$4"></div>';
$this->post['message'] = preg_replace('~<a (.*)href="(.*)facebook.com/(.*)/posts/(.*)"(.*)<\/a>~', $drc_embed_facebook_post, $this->post['message']);
}
Я имел это перевернуто в другую сторону (после того первым), но это вызвало комментарии встраивать сообщения, я получил вокруг этого, проверяя для комментариев первых что, вероятно, не самый лучший способ сделать это.
Итак, вы, возможно, заметили мое регулярное выражение, это не самое большое, но это то, что я смог сделать самостоятельно, будучи новым для регулярного выражения.
~<a (.*)href="(.*)facebook.com/(.*)/posts/(.*)"(.*)<\/a>~
Я выбираю сделать мои регулярные выражения этим путем, так оно не имеет значения, если ссылка была отформатирована как следующий он все равно встраивать:
<a target="blank" href="https://www.facebook.com/USERNAME/posts/1234567890" alt="facebook post">LINK</a>
Но теперь я второй угадал мою работу, и после поиска и не придумывая ничего, я решил, что попрошу о помощи.
Как я могу различать эти ссылки так, чтобы сообщения, не мешали комментариям/ответам с комментариями?
Update 1, погруженные сообщения
Теперь мой плагин выглядит следующим образом
$drc_embed_facebook_post = '<div class="fb-post" data-href="https://www.facebook.com/$2/posts/$3"></div>';
$this->post['message'] = preg_replace('~<a (.*?)facebook\.com/([^/]+)/[^/]+/([0-9]+)(?:[?][^0-9]+([0-9]+)(?:&(.+))?)?</a>~', $drc_embed_facebook_post, $this->post['message']);
Regex специально
~<a (.*?)facebook\.com/([^/]+)/[^/]+/([0-9]+)(?:[?][^0-9]+([0-9]+)(?:&(.+))?)?</a>~
Я оставил начало ленивого что-нибудь? Я считаю ... не ограничивать www. https: // ect ... (все, что приходит до facebook.com)
Это частично работает, захватывая ссылки непосредственно на сообщения, вот несколько примеров.
https://www.facebook.com/RyanNewMe/posts/616837631826216?pnref=story
https://www.facebook.com/zuck/posts/10102833246942211?pnref=story
https://www.facebook.com/zuck/posts/10102830259184701?pnref=story
Эти ссылки не вставляют сообщение.Однако, если я удалю ?pnref=story
из них, только следующая ссылка не работает.
https://www.facebook.com/RyanNewMe/posts/616837631826216
Создание меня стек вопросы здесь, но КАК! lol, я понимаю, что он делает, но как в мире вы, ребята, придумали правильное регулярное выражение? Я пробовал gens, tuts и сообщения после сообщений, я не могу придумать регулярное выражение, чтобы спасти мою жизнь, просто вырос любите использовать НИЧЕГО '(. *)' lol. но если я правильно это рассмотрю, я могу отбросить все '~ ~' and use... 'preg_replace('~~'' –
and something feels off, this bit 'facebook\.com/[^/]+/[^/]+/([0-9]+)' should contain $1 and $2 we need to change zuck and the post number –
@DrCustUmz The end of that should be '(?:&(.+))?)? ~', и начало может быть ленивым, как: ' Laurel