preg_match(); - Unknown modifier '+'
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.
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
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, 2020Comments
-
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 about 13 yearsprint_r($match); returns "Array ( )"I'm pretty sure my expression is correct.
-
Khez about 13 yearsI don't know what you tried to say with your comment...
-
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 about 13 yearsYup, just trying to pull the most recent game :)
-
David Bradbury about 13 yearsIt works, but the problem is, the feed doesn't always being with "played some". Sorry I'm being difficult!
-
Khez about 13 yearsUpdated my code yet again, considered this time you always have <a>USER</a> <a>Game</a> in that order.
-
Shane N almost 9 yearsThank you for letting me know about preg_quote - very useful function!
-
stamster almost 6 yearsWell, 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/
.