Simon
Simon

Reputation: 23141

get the content of matched element

i have a string

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

i need to get the content within [start] and [end].

when i use

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

it mutches [start] my string [end], but i need to get only my string(without spaces).

sure i can make another preg_replace and delete them, but i think there must be more elegant solution.

Thanks

Upvotes: 1

Views: 73

Answers (1)

kennytm
kennytm

Reputation: 523214

Use captured groups.

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

(Note that your regex will fail if there are multiple [start]/[end] groups (needs lazy quantifier .+?), or nested [start]/[end] groups (use recursive pattern).)


If you don't want the spaces, you could avoid matching it in the regex:

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

or just call trim().

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

Upvotes: 4

Related Questions