Re: please help with regular expression in preg_replace
| From: | Mailing Lists) | Date: | Thu, 29 Oct 2009 21:57:30 +0000 |
| Subject: | Re: please help with regular expression in preg_replace | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-299534@lists.php.net to get a copy of this message | ||
Hi Rene,
This looks suspiciously like regex's "greedy" behaviour - it will gobble up everything that matches until you tell it otherwise.
For example, your regex is matching "any character that isn't a dot, followed by a dot."
In host.domain.com, both "host." and "domain." match this regex - and because your regex is "greedy" it's grabbing both, leaving you with "com".
Try adding the "ungreedy" modifier to your regex, like so: $domain = preg_replace( '/[^.]*\./U' , '', $host); (note the additional U in your regex.)
HTH,
Andy
On 29 October2009, at 20:33, Red wrote:
hello, im not a php developer, i just need to rewrite one php file but having problem with understanding syntax of regexp in php. i need to get domain name from fqdn (for example from $_SERVER['HTTP_HOST'] ) in sed its working well with "s/[^.]*\.//" , but preg_replace behaves weird. http_host is for example hostname.domain.com <?php $host = $_SERVER['HTTP_HOST']; exec( "echo $host | sed s/[^.]*\.//", $domain ) ; echo "$domain[0]" ?> return "domain.com", but <?php $host = $_SERVER['HTTP_HOST']; $domain = preg_replace( '/[^.]*\./' , '', $host) ; echo "$domain"; ?> return only "com" i think when this php page get many hits, its not so wise to call sed everytime, i would like to ask someone for help how to write preg_replace pattern. thanx Rene