PHP preg_match get in between string

Kevin King picture Kevin King · Nov 26, 2012 · Viewed 48.4k times · Source

I'm trying to get the string hello world.

This is what I've got so far:

$file = "1232#hello world#";

preg_match("#1232\#(.*)\##", $file, $match)

Answer

Michael Berkowski picture Michael Berkowski · Nov 26, 2012

It is recommended to use a delimiter other than # since your string contains #, and a non-greedy (.*?) to capture the characters before #. Incidentally, # does not need to be escaped in the expression if it is not also the delimiter.

$file = "1232#hello world#";
preg_match('/1232#(.*?)#/', $file, $match);

var_dump($match);
// Prints:
array(2) {
  [0]=>
  string(17) "1232#hello world#"
  [1]=>
  string(11) "hello world"
}

Even better is to use [^#]+ (or * instead of + if characters may not be present) to match all characters up to the next #.

preg_match('/1232#([^#]+)#/', $file, $match);