the5thace Posted July 28, 2013 Share Posted July 28, 2013 Sample string: "cats NOT dogs". How would I replace that with "cats -dogs"? Notice there is no space between the -dog but there was a space between NOT dog. This should be applicable to any string. Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/ Share on other sites More sharing options...
ignace Posted July 28, 2013 Share Posted July 28, 2013 preg_replace('/ not /i', ' -', $subject); preg_replace('/\\bnot\\b /i', '-', $subject); Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442502 Share on other sites More sharing options...
davidannis Posted July 28, 2013 Share Posted July 28, 2013 try something like this: <?php $mystring = 'abcd NOT def'; $findme = 'NOT '; $new=str_replace($findme, '-', $mystring); echo $new; ?> Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442505 Share on other sites More sharing options...
davidannis Posted July 28, 2013 Share Posted July 28, 2013 looking at ignace's version compared to mine I see I did not require either a space before the not or that the not be at the start of the string. Mine is case sensitive. Hers is not. Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442506 Share on other sites More sharing options...
davidannis Posted July 28, 2013 Share Posted July 28, 2013 To catch the NOT at the start of the string and require a space in front of it using substr try this: <?php $mystring = ' abcNOT def'; $findme = ' NOT '; if (substr($mystring, 0, 4)=='NOT '){ $new="-".substr($mystring, 4); }else{ $new=str_replace($findme, ' -', $mystring); } echo $new; ?> Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442509 Share on other sites More sharing options...
the5thace Posted July 28, 2013 Author Share Posted July 28, 2013 echo still ends with dog+not+cat $Bquery = urlencode($_POST['query']); if ( strpos( strtoupper($Bquery), "NOT")!==false ) { $findme = ' NOT '; if (substr($Bquery, 0, 4)=='NOT ') { $new="-".substr($Bquery, 4); } else { $new=str_replace($findme, ' -', $Bquery); } echo $new; Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442512 Share on other sites More sharing options...
.josh Posted July 28, 2013 Share Posted July 28, 2013 the search/replace logic is failing because you are urlencoding the string before doing the search/replace, which is changing " " to "+". Perhaps you meant to urldecode instead? Or perhaps that urlencode needs to happen after this search/replace. In any case, $Bquery = preg_replace('~(?<=\b)(not\s+(?=\w))~i','-',$Bquery); This will replace "not " with "-" only if there's a word character after it. Examples: "cat not dog" > "cat -dog" "not dog" > "-dog" "cat not" > "cat not" "cat not " > "cat not " "cat not ?&$S" > cat not ?&$S" "cat not 12345" > cat -12345" Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442517 Share on other sites More sharing options...
ignace Posted July 28, 2013 Share Posted July 28, 2013 Hers is not. Hers??? Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442533 Share on other sites More sharing options...
davidannis Posted July 29, 2013 Share Posted July 29, 2013 Hers??? My bad. Profuse apologies. Link to comment https://forums.phpfreaks.com/topic/280595-if-a-string-contains-not-word-how-to-replace-it-with-word/#findComment-1442580 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.