2010-09-17 2 views
1
$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. удалить только последний матч

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

+0

попробуйте этот '/ \\ [([^ \\] *) \\] /' – jcubic

+0

@jcubic, в чем разница? – James

+0

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

ответ

2

Это следует сделать это:

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

+0

должен быть способ удалить все, первое или только последнее совпадение – James

+0

** $ first ** is ** [(где это?)] ** это должно быть ** (где это?) ** (удалить [и]) – James

+0

@Happy, это исправлено, был неправильный ключ. –

Смежные вопросы