2010-08-21 4 views
1

У меня есть строкаполучить содержимое совпавшего элемента

$str = "this is [start] my string [end] at this moment"; 

мне нужно, чтобы получить содержание в пределах [start] и [end].

когда я использую

$result = preg_match('/\[start\].+\[end\]/',$str, $m); 

это mutches [start] my string [end], но мне нужно получить только my string (без пробелов).

уверен, что я могу сделать еще одно preg_replace и удалить их, но я думаю, что должно быть более элегантное решение.

Thanks

ответ

4

Использование захваченных групп.

$result = preg_match('/\[start\](.+)\[end\]/',$str, $m); 
$matched = $m[1]; 

(Обратите внимание, что регулярное выражение потерпит неудачу, если есть несколько [start]/[end] групп (необходима ленивый квантор .+?), или вложенные [start]/[end] групп (используйте рекурсивный рисунок).)


Если вам не нужны пробелы, вы можете избежать совпадения в регулярном выражении:

$result = preg_match('/\[start\]\s*(.+?)\s*\[end\]/',$str, $m); 
$matched = $m[1]; 

o r просто позвоните trim().

$result = preg_match('/\[start\](.+)\[end\]/',$str, $m); 
$matched = trim($m[1]); 
+0

отличная. и что относительно пробелов? – Simon

+0

@Syom: См. Обновление. – kennytm

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