preg_match(); - Unknown modifier '+'

140,278

Solution 1

You need to use delimiters with regexes in PHP. You can use the often used /, but PHP lets you use any matching characters, so @ and # are popular.

Further Reading.

If you are interpolating variables inside your regex, be sure to pass the delimiter you chose as the second argument to preg_quote().

Solution 2

Try this code:

preg_match('/[a-zA-Z]+<\/a>.$/', $lastgame, $match);
print_r($match);

Using / as a delimiter means you also need to escape it here, like so: <\/a>.

UPDATE

preg_match('/<a.*<a.*>(.*)</', $lastgame, $match);
echo'['.$match[1].']';

Might not be the best way...

Solution 3

This happened to me because I put a variable in the regex and sometimes its string value included a slash. Solution: preg_quote.

Solution 4

May be this will be usefull for u: ReGExp on-line editor

Share:
140,278
David Bradbury
Author by

David Bradbury

I'm David Bradbury - Technology Director and Web Engineer I lover the web and I'm doing what I can to make it a better, more accessible place for everyone.

Updated on November 11, 2020

Comments

  • David Bradbury
    David Bradbury over 3 years

    Alright, so I'm currently working on parsing an RSS feed. I've gotten the data I need no problem, and all I have left is parsing the game title.

    Here is the code I currently have (ignore the sloppiness, it is just a proof of concept):

    <?php
    $url = 'http://raptr.com/conexion/rss';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $result = curl_exec($ch); 
    curl_close($ch);
    
    $xml = new SimpleXMLElement($result);
    
    $lastgame = $xml->channel->item[0]->description;
    preg_match('[a-zA-Z]+</a>.$', $lastgame, $match);
    
    echo $match;
    ?>
    

    Everything was working great, but then I started getting this error:

    Warning: preg_match() [function.preg-match]: 
    Unknown modifier '+' in raptr.php on line 14
    

    The only thing I have left is to strip out the closing anchor tag and the period, but I can't seem to figure out why it isn't liking the '+'. Any ideas?

    Edit: This should not be marked as a duplicate as it was asked two years before the other question.

  • David Bradbury
    David Bradbury about 13 years
    print_r($match); returns "Array ( )"I'm pretty sure my expression is correct.
  • Khez
    Khez about 13 years
    I don't know what you tried to say with your comment...
  • Khez
    Khez about 13 years
    @Conexion, checked your other comments, what is it you are trying to pull from that rss feed into your match ? The games ?
  • David Bradbury
    David Bradbury about 13 years
    Yup, just trying to pull the most recent game :)
  • David Bradbury
    David Bradbury about 13 years
    It works, but the problem is, the feed doesn't always being with "played some". Sorry I'm being difficult!
  • Khez
    Khez about 13 years
    Updated my code yet again, considered this time you always have <a>USER</a> <a>Game</a> in that order.
  • Shane N
    Shane N almost 9 years
    Thank you for letting me know about preg_quote - very useful function!
  • stamster
    stamster almost 6 years
    Well, that was a surprise. string preg_quote ( string $str [, string $delimiter = NULL ] ) -> function signature forces nothing as default, thus kicked me in the balls when least expected. Default should be /.