Search code examples
phpregexpreg-match

PHP preg_match get in between string


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)

Solution

  • 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);