2011-03-10 3 views
1

Мне нужно регулярное выражение, чтобы удалить # из имени твиттера.PHP Удалить # using preg

Пробовал так:

$name = '#mytwitter'; 
$str = preg_replace('/\#/', ' ', $name); 

Конечно, это легко исправить, но Google не помогло. Благодаря!

ответ

6

Вам не нужно использовать preg_replace, просто использовать str_replace:

str_replace('#','',$name); 
+0

спасибо, решено после быстрого редактирования. – BobFlemming

2

Почему вы избегаете #?

$name = '#mytwitter'; 
$str = preg_replace('/#/', ' ', $name); 

Edit: Ваш исходный код работает, тоже. Обратите внимание, что preg_replace возвращает замененную строку, но не меняет оригинал. Значение $str - «mytwitter».

+0

'preg_replace' намного медленнее, чем' str_replace', нет необходимости использовать его здесь – JamesHalsall

+0

@Jaitsu: Конечно, но между компиляцией и переписыванием кода всегда есть компромисс. Не совсем очевидно, от чего лучше всего выиграл оригинальный плакат. – Tim

1

Вам не нужно бежать #.

$str = preg_replace('/#/', '', $name); 

Однако для простого удаления символа, то лучше использовать str_replace(). Это быстрее для этих ситуаций.

$str = str_replace('#', '', $name); 
1

Я бы рекомендовал использовать для этого strtok, так как он более совершенен. Просто использовать его так:

$str = strtok('#mytwitter', '#'); 

Вот некоторые тесты я просто бежал (50000 итераций):

strreplace execution time: 0.068472146987915 seconds 
preg_replace execution time: 0.12657809257507 seconds 
strtok execution time: 0.043070077896118 seconds 

Сценарий я использовал для эталонного теста (взято из Beautiful way to remove GET-variables with PHP?):

<?php 

$number_of_tests = 50000; 

// str_replace 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$starttime = $mtime; 

for($i = 0; $i < $number_of_tests; $i++){ 
    $str = "#mytwitter"; 
    $str = str_replace('#' , '', $str); 
} 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$endtime = $mtime; 
$totaltime = ($endtime - $starttime); 
echo "strreplace execution time: ".$totaltime." seconds; <br />"; 

// preg_replace 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$starttime = $mtime; 

for($i = 0; $i < $number_of_tests; $i++){ 
    $str = "#mytwitter"; 
    $str = preg_replace('/#/', ' ', $str); 
} 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$endtime = $mtime; 
$totaltime = ($endtime - $starttime); 
echo "preg_replace execution time: ".$totaltime." seconds; <br />"; 

// strtok 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$starttime = $mtime; 

for($i = 0; $i < $number_of_tests; $i++){ 
    $str = "#mytwitter"; 
    $str = strtok($str, "#"); 
} 
$mtime = microtime(); 
$mtime = explode(" ",$mtime); 
$mtime = $mtime[1] + $mtime[0]; 
$endtime = $mtime; 
$totaltime = ($endtime - $starttime); 
echo "strtok execution time: ".$totaltime." seconds; <br />"; 

    [1]: http://php.net/strtok 
+0

спасибо за это, заглянем в нее, всегда пригодится, чтобы ускорить работу! – BobFlemming