получить содержимое соответствующего элемента - PullRequest
1 голос
/ 21 августа 2010

у меня есть строка

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

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

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

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

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

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

Спасибо

1 Ответ

4 голосов
/ 21 августа 2010

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

$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];

или просто вызватьtrim().

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