user3011850
user3011850

Reputation:

Regular expression for finding multiple patterns from a given string

I am using regular expression for getting multiple patterns from a given string. Here, I will explain you clearly.

$string = "about us";
$newtag = preg_replace("/ /", "_", $string);
print_r($newtag); 

The above is my code.

Here, i am finding the space in a word and replacing the space with the special character what ever i need, right??

Now, I need a regular expression that gives me patterns like

about_us, about-us, aboutus as output if i give about us as input. Is this possible to do. Please help me in that.

Thanks in advance!

Upvotes: 4

Views: 105

Answers (7)

user3011850
user3011850

Reputation:

And finally, my answer is

$string = "contact_us";
$a  = array('-','_',' ');
foreach($a as $b){
    if(strpos($string,$b)){
        $separators = array('-','_','',' ');
        $outputs = array();
        foreach ($separators as $sep) {
            $outputs[] = preg_replace("/".$b."/", $sep, $string);
        }
        print_r($outputs);  
    }
}

exit;

Upvotes: 2

Dwza
Dwza

Reputation: 6565

Matches any character that is not a word character

$string = "about us";
$newtag = preg_replace("/(\W)/g", "_", $string);
print_r($newtag);

in case its just that... you would get problems if it's a longer string :)

Upvotes: 0

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89639

I am not sure that regexes are the good tool for that. However you can simply define this kind of function:

function rep($str) {
    return array( strtr($str, ' ', '_'), 
                  strtr($str, ' ', '-'),
                  str_replace(' ', '', $str) );
}

$result = rep('about us');

print_r($result);

Upvotes: 0

Adlin Ling
Adlin Ling

Reputation: 382

If you just want to replace the space, use \s

<?php

$string = "about us";
$replacewith = "_";
$newtag = preg_replace("/\s/", $replacewith, $string);
print_r($newtag);

?>

Upvotes: 0

Stephen
Stephen

Reputation: 1

Not knowing exactly what you want to do I expect that you might want to replace any occurrence of a non-word (1 or more times) with a single dash.

e.g.

preg_replace('/\W+/', '-', $string);

Upvotes: 0

Thibault
Thibault

Reputation: 1596

You need to do a loop to handle multiple possible outputs :

$separators = array('-','_','');
$string = "about us";
$outputs = array();
foreach ($separators as $sep) {
 $outputs[] = preg_replace("/ /", $sep, $string);
}
print_r($outputs);

Upvotes: 1

hsz
hsz

Reputation: 152304

You can try without regex:

$string      = 'about us';
$specialChar = '-'; // or any other
$newtag      = implode($specialChar, explode(' ', $string));

If you put special characters into an array:

$specialChars = array('_', '-', '');
$newtags      = array();
foreach ($specialChars as $specialChar) {
  $newtags[]  = implode($specialChar, explode(' ', $string));
}

Also you can use just str_replace()

 foreach ($specialChars as $specialChar) {
  $newtags[]  = str_replace(' ', $specialChar, $string);
}

Upvotes: 0

Related Questions