Как с помощью регулярки вытащить значения в квадратных скобках?

Ссылка скопирована
1 ответ

Только начал изучать регулярные выражения. Столкнулся с такой ситуацией

имеется значения, их несколько и они разные, например

[IMG l="image.jpg" t="Картинка для баннера" d="Скрытое описание"]

[IMG l="image.jpg" t="Картинка для баннера" d="Скрытое описание"]

Как перевести эти значения, по структуре в такие:

<img src="image.jpg" alt="Картинка для баннера" data="Скрытое описание">

<img src="image.jpg" alt="Картинка для баннера" data="Скрытое описание">

Дополнительно:

Берете документацию по регуляркам.
Берете сайт-тестер регулярок:
https://regex101.com/
Берете предварительную заготовку регулярки:

[IMG l="эксперимент_над_подбором_произвольной_подстроки_1" t="эксперимент_над_подбором_произвольной_подстроки_2" d="эксперимент_над_подбором_произвольной_подстроки_3"]

[IMG l="эксперимент_над_подбором_произвольной_подстроки_1" t="эксперимент_над_подбором_произвольной_подстроки_2" d="эксперимент_над_подбором_произвольной_подстроки_3"]

Добиваетесь, чтобы значения l, t, d сматчились под разными индексами.
Потом в PHP подставляете сматченные значения из результирующего массива:

$result = '<img src="'.$matches[0].'" alt="'.$matches[1].'" data="'.$matches[2].'">';

$result = '<img src="'.$matches[0].'" alt="'.$matches[1].'" data="'.$matches[2].'">';

  • Во-первых, здесь на хрен не нужны регулярки.
    Обычная замена по списку известных тегов (заодно не пропускающая [SCRIPT], например).
  • <?php  $input = '[IMG l="image.jpg" t="Картинка для баннера" d="Скрытое описание"]';  $result = preg_replace(     '![IMG l="(.*?)" t="(.*?)" d="(.*?)"]!si',      '<img src="$1" alt="$2" data="$3" />',      $input );  var_dump($result);

    <?php $input = '[IMG l="image.jpg" t="Картинка для баннера" d="Скрытое описание"]'; $result = preg_replace( '![IMG l="(.*?)" t="(.*?)" d="(.*?)"]!si', '<img src="$1" alt="$2" data="$3" />', $input ); var_dump($result);

    • забыли кавычку https://phpize.online/s/6t
    • Slava Rozhnev, исправил ответ
    • А потом кто-то меняет местами поля l, t и d...
    • Rsa97, какой вопрос - такой и ответ. Но тут достаточно информации для "изучающего регулярки" чтобы справиться и с такой задачей. Просто делать придётся в 2 шага.
      1. найти все теги [IMG]
      2. внутри вхождений найти уже l=, d=, t= в любом порядке
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Для того чтобы извлечь значения в квадратных скобках с помощью регулярного выражения, вам нужно использовать следующий шаблон:

    preg_match_all('/\[(.*?)\]/', $string, $matches);
    print_r($matches[1]);

    preg_match_all('/\[(.*?)\]/', $string, $matches); print_r($matches[1]);

    Это регулярное выражение будет искать все подстроки, которые находятся между квадратными скобками в строке `$string` и сохранять их в массив `$matches`. Затем вы можете вывести эти значения с помощью `print_r($matches[1])`.

    Например, если у вас есть строка "Пример [значение1] текст [значение2] еще текст", то после выполнения данного кода вы получите массив, содержащий `значение1` и `значение2`.

    Помните, что в регулярных выражениях символ `\` используется для экранирования специальных символов, поэтому перед каждой квадратной скобкой в выражении стоит обратная косая черта.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно