Поиск и замена URL - Regex?

1

Я пытаюсь создать короткий код WordPress (часть WordPress этого не имеет значения), который будет искать в пределах определенного текста для ссылки и заменить его на тот, который я укажу. Например:

[scode]Click on <a href="www.X.com">this link</a>[scode]
[scode]Click on <a href="www.Y.com">this link</a>[scode]

... будет изменено на:

[scode]Click on <a href="www.Z.com">this link</a>[scode]

Я пытаюсь собрать функцию, которая будет искать ссылки и заменять их тем, что я указываю. Вот что я имею прямо сейчас:

// Adds [hide] shortcode for hiding content from non-registered users.

function hide_text( $atts,$content) {
    if ( is_user_logged_in () ) {
        return $content;
    }
    else {
        $pattern = '(?<=href=("|\'))[^"\']+(?=("|\'))';
        $newurl = "http://replacementurl.com";
        $content = preg_replace($pattern,$newurl,$content);
        echo $content;
          }
    }
add_shortcode( 'hide', 'hide_text' );

Однако это просто разрушает сайт. Я не эксперт по PHP (а тем более эксперт по регулярному выражению), но есть ли хотя бы какие-то явные нарушения в моем коде?

ОБНОВИТЬ:

Я запустил debug на сайте и узнал из журнала, что там был дополнительный }. Теперь сайт не сбой, но содержимое, отображаемое эхом, пустое... Код обновлен выше

  • 0
    Когда он падает, вы получаете ошибку?
  • 0
    @DavidStarkey да, не удается подключиться к серверу. Обычная ошибка, когда есть какой-то испорченный код.
Теги:

2 ответа

1

http://replcaement url.com Довольно уверен, что это написано неправильно.

и нет ; в конце строки.

Похоже, что вы правильно выполнили регулярное выражение, так как в большинстве случаев вам нужно избегать некоторых зарезервированных символов, которые смотрят на ответ @Akam.

Я предлагаю использовать preg цитаты.

(?<=href=("|'))[^"']+(?=("|'))

Regular expression visualization

Редактировать в прямом эфире на Debuggex

  • 0
    Это будет лучше работать в качестве комментария, поскольку это не будет причиной сбоя сайта.
  • 0
    @DavidStarkey извините, я все еще редактировал свой ответ.
Показать ещё 1 комментарий
1

В вашем шаблоне есть синтаксическая ошибка, измените ее на:

    $pattern = "(?<=href=(\"|'))[^\"']+(?=(\"|'))";

Ошибки:

    $pattern = "(?<=href=("|'))[^"']+(?=("|'))";
                          ^--            ^--not escaped
  • 0
    Это не «сбивает» сайт, но никакой контент не загружается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню