Мне нужно регулярное выражение, чтобы удалить # из имени твиттера.PHP Удалить # using preg
Пробовал так:
$name = '#mytwitter';
$str = preg_replace('/\#/', ' ', $name);
Конечно, это легко исправить, но Google не помогло. Благодаря!
Мне нужно регулярное выражение, чтобы удалить # из имени твиттера.PHP Удалить # using preg
Пробовал так:
$name = '#mytwitter';
$str = preg_replace('/\#/', ' ', $name);
Конечно, это легко исправить, но Google не помогло. Благодаря!
Вам не нужно использовать preg_replace
, просто использовать str_replace
:
str_replace('#','',$name);
Почему вы избегаете #
?
$name = '#mytwitter';
$str = preg_replace('/#/', ' ', $name);
Edit: Ваш исходный код работает, тоже. Обратите внимание, что preg_replace
возвращает замененную строку, но не меняет оригинал. Значение $str
- «mytwitter».
'preg_replace' намного медленнее, чем' str_replace', нет необходимости использовать его здесь – JamesHalsall
@Jaitsu: Конечно, но между компиляцией и переписыванием кода всегда есть компромисс. Не совсем очевидно, от чего лучше всего выиграл оригинальный плакат. – Tim
Вам не нужно бежать #
.
$str = preg_replace('/#/', '', $name);
Однако для простого удаления символа, то лучше использовать str_replace()
. Это быстрее для этих ситуаций.
$str = str_replace('#', '', $name);
Я бы рекомендовал использовать для этого 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
спасибо за это, заглянем в нее, всегда пригодится, чтобы ускорить работу! – BobFlemming
спасибо, решено после быстрого редактирования. – BobFlemming