Поиск внутри строки - PullRequest
       5

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

1 голос
/ 17 сентября 2010
$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. удаление только последнего совпадения

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

1 Ответ

2 голосов
/ 17 сентября 2010

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

$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 для замены тегов, все подобные вхождения тегов будут удалены, если такие существуют, а не только в первом.

...