wb_86
wb_86

Reputation: 27

preg_match_all pattern creation

How can i properly format regex pattern to find matches for strings contained between (* ''' and ''') from ex. something like this:

Lorem ipsum dolor sit amet, *'''Consectetur adipiscing elit'''. Quisque id diam sit amet
lectus semper blandit a sit amet nibh. *'''Phasellus fermentum nisi vitae lacus'''
scelerisque dapibus.

I have tried something like this:

preg_match_all("/\* \'\'\'(.+?)\'\'\'/i", $new_content, $matches);

But I get result like this:

array (size=2)
  0 => 
    array (size=2)
        0 => string '* '''Consectetur adipiscing elit''''
        1 => string '* '''Phasellus fermentum nisi vitae lacus''''
  1 => 
    array (size=2)
        0 => string 'Consectetur adipiscing elit'
        1 => string 'Phasellus fermentum nisi vitae lacus'

I don't work with regex almost at all, so i don't know exactly what am I doing!

Upvotes: 2

Views: 64

Answers (1)

hek2mgl
hek2mgl

Reputation: 158010

You can use the following pattern:

$str = <<<EOF
Lorem ipsum dolor sit amet, *'''Consectetur adipiscing elit'''. Quisque id diam sit amet
lectus semper blandit a sit amet nibh. *'''Phasellus fermentum nisi vitae lacus'''
scelerisque dapibus.
EOF;

$pattern = "~\*'''(.*?)'''~s";

if(preg_match_all($pattern, $str, $matches)) {
    var_dump($matches[1]);
}

Output:

array(2) {
  [0] =>
  string(27) "Consectetur adipiscing elit"
  [1] =>
  string(36) "Phasellus fermentum nisi vitae lacus"
}

Explanation:

     ~      is the pattern delimiter
    \*      asterisk has to be escaped
   '''      ''' 
    ()      special matching group
   .*?      any char (except of the following ''', ? -> ungreedy)
   '''      '''
     ~      pattern delimter
     s      Option, includes newlines in .*

Upvotes: 2

Related Questions