invictive Posted November 27, 2009 Share Posted November 27, 2009 Hi guys, I'm trying to edit a php file that grabs the weather from an RSS feed and formats it for my phone. I want it to search for the following string: Sunday: XXXXX Low XX. High XX. and strip everything between the first : and the final . The XXX are variables. So it would simply return: Sunday I can get it to replace static text, but I have no idea how to get it to replace data with wildcards. So far all I have is: $string=preg_replace(array("/Sunday: /","/Sunday: /"), array("Sunday","Sunday"), $string); but all that does is replace Sunday: with Sunday, it still leaves all the crap after it. Any help would be greatly appreciated, Thanks, invictive Link to comment https://forums.phpfreaks.com/topic/183150-preg_replace-help/ Share on other sites More sharing options...
thebadbad Posted November 27, 2009 Share Posted November 27, 2009 That's only part of a larger string, right? Assuming the 'variables' are non-whitespace, try this: <?php echo preg_replace('~(Sunday): \S+ Low \S+ High \S+~i', '$1', $string); ?> If the string you provided is the full string, you could simply do <?php echo substr($string, 0, strpos($string, ':')); ?> Link to comment https://forums.phpfreaks.com/topic/183150-preg_replace-help/#findComment-966695 Share on other sites More sharing options...
.josh Posted November 28, 2009 Share Posted November 28, 2009 $string = preg_replace('~([a-z]+):.+\.~i','$1',$string); Link to comment https://forums.phpfreaks.com/topic/183150-preg_replace-help/#findComment-966699 Share on other sites More sharing options...
invictive Posted November 28, 2009 Author Share Posted November 28, 2009 Thanks guys, $string = preg_replace('~([a-z]+):.+\.~i','$1',$string); seemed to do the trick, however I noticed that sometimes the string is different. I will attach the files to properly demonstrate what I mean. The RSS file that the script is grabbing and parsing: http://www.weatheroffice.gc.ca/rss/city/bc-85_e.xml The output file as the script is currently configured: http://pastebin.ca/1690436 The script: http://pastebin.ca/1690431 As you can see sometimes the string is different and there is more data. Is there any way to have it keep everything before the : (the day) and remove everything after? (including the thanks a lot, -invictive Link to comment https://forums.phpfreaks.com/topic/183150-preg_replace-help/#findComment-966734 Share on other sites More sharing options...
invictive Posted November 28, 2009 Author Share Posted November 28, 2009 Ok, I seem to have got it working ok, this is what I have: $string = preg_replace('~(Sunday+):[^<]+~i','$1',$string); $string = preg_replace('~(Sunday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Monday+):[^<]+~i','$1',$string); $string = preg_replace('~(Monday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Tuesday+):[^<]+~i','$1',$string); $string = preg_replace('~(Tuesday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Wednesday+):[^<]+~i','$1',$string); $string = preg_replace('~(Wednesday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Thursday+):[^<]+~i','$1',$string); $string = preg_replace('~(Thursday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Friday+):[^<]+~i','$1',$string); $string = preg_replace('~(Friday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Saturday+):[^<]+~i','$1',$string); $string = preg_replace('~(Saturday Night+):[^<]+~i','$1',$string); $string = preg_replace('~(Current Conditions+):[^<]+~i','$1',$string); does that look ok, is there anything I should do to clean it up a bit? Thanks! -invictive Link to comment https://forums.phpfreaks.com/topic/183150-preg_replace-help/#findComment-966839 Share on other sites More sharing options...
thebadbad Posted November 28, 2009 Share Posted November 28, 2009 I would probably do it like this then: <?php $replace = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Current Conditions'); $string = preg_replace('~(<title>(?:' . implode('|', $replace) . ')[^:]*):[^<]+~i', '$1', $string); ?> Just make sure that the string in $replace doesn't contain any special regex chars or the delimiter in use. Link to comment https://forums.phpfreaks.com/topic/183150-preg_replace-help/#findComment-966873 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.