Удалите с помощью регулярного выражения конечную часть строки - PullRequest
2 голосов
/ 03 февраля 2010

Я пытаюсь удалить из строки все, что начинается с / char, поэтому, если у меня есть

my_value/j/im<b*+èo[/h>e\ylo

Я хотел бы удалить строку /j/im<b*+èo[/h>e\ylo и вернуть только my_value. Я думал использовать что-то с str_replace, но я не большой программист регулярных выражений, и я занимаюсь с php.

function clean_value ($value) {
    return preg_replace ("^(/.*?)$", "", $value);
}

Как я могу это сделать?

Ответы [ 4 ]

5 голосов
/ 03 февраля 2010

Нет причин использовать регулярные выражения здесь. Вместо этого используйте комбинацию strpos() и substr():

$original = 'my_value/j/im<b*+èo[/h>e\ylo';

$removed = substr($original, 0, strpos($original, '/'));

Вышеприведенное сработает, если вы можете гарантировать, что в строке всегда будет хотя бы 1 / символ. Если вы не можете этого гарантировать или не знаете, просто измените на:

$removed = (strpos($original, '/') === false)
             ? $original 
             : substr($original, 0, strpos($original, '/'));
3 голосов
/ 03 февраля 2010

Самые простые вещи можно сделать без регулярных выражений

$string = "my_value/j/im<b*+èo[/h>e\ylo";
$splitted = explode("/",$string,2);
echo  "$splitted[0]\n";
2 голосов
/ 03 февраля 2010

Вам нужно удалить начальную каретку из регулярного выражения, и вы можете использовать жадное совпадение, чтобы получить остальную часть строки:

function clean_value ($value) {
    return preg_replace ("/\/.*/", "", $value);
}
2 голосов
/ 03 февраля 2010

Вы забыли разделители в своем регулярном выражении. И ^/ требует, чтобы строка начиналась с /.

Попробуйте вместо этого:

preg_replace("~/.*~", "", $value)

Это удалит что-нибудь от первого / до конца.

...