Intereting Posts
Предупреждение: mysql_fetch_object (): предоставленный аргумент не является допустимым ресурсом результата MySQL Не найден маршрут для «GET / user / register»: метод не разрешен (разрешить: POST) Анонимные рекурсивные функции PHP Чтение XML-динамического PHP PHP Lexer и Parser Generator? Как просмотреть сведения о сеансе в php с помощью firebug? Удалить дублированные старые строки и сохранить только последнюю версию mysql Является ли $ view в MVP-программе MVC правильным использованием глобальных переменных? Как проверить, установлен ли флажок / переключатель в php Как игнорировать дублирующее имя и делать первую букву должны быть кепки с помощью вложенного массива? Загрузка изображения на facebook Нет заголовка «Access-Control-Allow-Origin» – Laravel 5.4 PHP Определение текущего URL-адреса Ввод переменного объема данных в базу данных с наилучшей возможной нормализацией Обратный preg_replace

Поиск внутри строки

$variable = 'of course it is unnecessary [http://google.com], but it is simple["very simple"], and this simple question clearly needs a simple, understandable answer [(where is it?)] in plain English' 

Значение переменной меняется каждый раз.

Я пытаюсь получить текст из [...] . Итак, если есть [(google)] , совпадение должно быть (google) .

Я ищу решение, которое может выполнять каждое из этих действий:

  1. получить все совпадения […], записать в $all
  2. получить только первый матч, записать в $first
  3. получить только последнее совпадение, записать в $last
  4. удалить все совпадения […] из переменной (стереть)
  5. удалить только первое совпадение
  6. удалить только последний матч

Пробовал для этого регулярное выражение, например /[\(.*?\)]/ , но результаты не то, что можно было бы ожидать.

Это должно сделать это:

 $variable = 'of course it is unnecessary [http://google.com], but it is simple["very simple"], and this simple question clearly needs a simple, understandable answer [(where is it?)] in plain English'; preg_match_all("/(\[(.*?)\])/", $variable, $matches); $first = reset($matches[2]); $last = end($matches[2]); $all = $matches[2]; # To remove all matches foreach($matches[1] as $key => $value) { $variable = str_replace($value, '', $variable); } # To remove first match $variable = str_replace($first, '', $variable); # To remove last match $variable = str_replace($last, '', $variable); 

Обратите внимание: если вы используете str_replace для замены тегов, все подобные вхождения тегов будут удалены, если они существуют, а не только первые.