RE: [PHP] regex problem

From: Date: Mon, 17 Mar 2003 01:19:02 +0000
Subject: RE: [PHP] regex problem
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-139899@lists.php.net to get a copy of this message
> suppose there's a string > $string="I like my(hot) coffee with sugar and (milk)(PHP)"; > > I would like to get an output of all possible combinations of the sentence > with the words between brackets: > eg. > I like my hot coffee with sugar and > I like my hot coffee with sugar and milk > I like my hot coffee with sugar and milk php > I like my coffee with sugar and > I like my coffee with sugar and milk php > etc.etc. > > The number of the words between brackets can differ and they can occur > everywhere. The most important is that all combinations are returned but > the > sentence (not between brackets) should be there. Here's a solution. :) Hope it helps. You could adapt it to not use the placeholders if each word in parenthesis is unique. <? $text = "I like my (hot) coffee with sugar and (milk)(PHP)"; //match words between parenthesis preg_match_all("/\((.*)\)/U",$text,$matches); //replace words with placeholder //<#x#> where 'x' is incremented //for each placeholder $a=0; $text2 = preg_replace("/\((.*)\)/Ue",'sprintf("<#%d#>",$a++)',$text); //determine how many words were matched //and what decimal number equals a binary //number of all ones and a length equal to //the number of matches $num_matches = count($matches[0]); $dec = bindec(str_repeat("1",$num_matches)); //Original text echo $text . "<hr>"; for($x=0;$x<=$dec;$x++) { $text3 = $text2; $cpy = $x; //loop equal to the number of matched words for($y=0;$y<$num_matches;$y++) { //if least significant bit is one then //replace placeholder with word from $matches //otherwise an empty string $replace = ($cpy & 1) ? $matches[1][$y] : ''; $text3 = str_replace("<#$y#>",$replace,$text3); //shift bits in $cpy one to the right $cpy = $cpy >> 1; } echo $text3 . "<br>"; } ?> ---John W. Holmes... PHP Architect - A monthly magazine for PHP Professionals. Get your copy today. http://www.phparch.com/

« previous php.general (#139899) next »