|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
please help with regular expression in preg_replacehello, 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 |
|
|
Re: please help with regular expression in preg_replaceHi 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 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php |
|
|
Re: please help with regular expression in preg_replaceRed 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 > I would add one thing and change another. <?php $host = $_SERVER['HTTP_HOST']; $domain = preg_replace( '/^[^.]+\./' , '', $host) ; echo $domain; ?> Adding an additional '^' to the start tells it to start at the beginning. And changing '*' to a '+' Jim -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php |
|
|
Re: please help with regular expression in preg_replaceMany thanx to Jim and andy for their replies, with Jim`s changes its now
working like in sed. Excuse me for my stupid question, but im old unix/linux system engineer coding with C , perl and bash, php gave me unpredictable results in this task. ;-) so, in final, may be this help some other roundcube users who need one universal site for many domain access. this is test page: <?php $host = "host.1stdom.com" ; //$host = "host.2nddom.1stdom.com" ; $pattern1 = '/[^.]*\./U' ; $pattern2 = '/^[^.]+\./' ; exec( "echo $host | sed s/[^.]*\.//", $dom_sed ) ; $p1_1 = preg_replace( '/[^.]*\./U' , '', $host ) ; $p1_2 = preg_replace( $pattern1 , '', $host ) ; $p2_1 = preg_replace( '/^[^.]+\./' , '', $host ) ; $p2_2 = preg_replace( $pattern2 , '', $host ) ; echo "$host <br>" ; echo "dom_sed = $dom_sed[0]<br>" ; echo "p1_1 = $p1_1 <br> " ; echo "p1_2 = $p1_2 <br> " ; echo "p2_1 = $p2_1 <br> " ; echo "p2_2 = $p2_2 <br> " ; ?> with result: host.1stdom.com dom_sed = 1stdom.com p1_1 = com p1_2 = com p2_1 = 1stdom.com p2_2 = 1stdom.com and this is line which i need in roundcube setup: $rcmail_config['username_domain'] = preg_replace( '/^[^.]+\./' , '', $_SERVER['HTTP_HOST'] ) ; many thanks again Rene ----- Original Message ----- From: "Jim Lucas" <lists@...> To: "Red" <red@...> Cc: <php-general@...> Sent: Friday, October 30, 2009 12:33 AM Subject: Re: [PHP] please help with regular expression in preg_replace > 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 >> > > I would add one thing and change another. > > <?php > $host = $_SERVER['HTTP_HOST']; > $domain = preg_replace( '/^[^.]+\./' , '', $host) ; > echo $domain; > ?> > > Adding an additional '^' to the start tells it to start at the beginning. > And changing '*' to a '+' > > Jim > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php |
| Free embeddable forum powered by Nabble | Forum Help |