Подтвердить что ты не робот

Как удалить что-либо в строке после "-"?

Это пример моей строки.

$x = "John Chio - Guy";
$y = "Kelly Chua - Woman";

Мне нужен шаблон для замены reg.

$pattern = ??
$x = preg_replace($pattern, '', $x); 

Спасибо

4b9b3361

Ответ 1

Нет необходимости в регулярном выражении. Вы можете использовать explode:

$str = array_shift(explode('-', $str));

или substr и strpos:

$str = substr($str, 0, strpos($str, '-'));

Возможно, в сочетании с trim удалить ведущие и завершающие пробелы.

Обновление: Как отмечает @Mark, это приведет к сбою, если часть, которую вы хотите получить, содержит -. Все зависит от вашего возможного ввода.

Итак, если вы хотите удалить все после тире last, вы можете использовать strrpos, который находит последнее вхождение подстрока:

$str = substr($str, 0, strrpos($str, '-'));

Итак, вы видите, что не требуется регулярного выражения;)

Ответ 2

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

"/-.*$/"

Чтобы удалить все после последнего дефиса, вы можете использовать это регулярное выражение:

"/-[^-]*$/"

http://ideone.com/gbLA9

Вы также можете комбинировать это с обрезкой пробела с конца результата:

"/\s*-[^-]*$/"

Ответ 3

Вы можете использовать strtok:

$x = strtok($x, '-');

Ответ 4

Вы также можете использовать.

strstr( "John Chio - Guy", "-", true ) . '-';

Третий параметр true сообщает функции вернуть все до первого появления второго параметра.

Источник на strstr() из php.net

Ответ 5

Я надеюсь, что эти шаблоны помогут вам =]

$pattern1='/.+(?=\s-)/'       //This will match the string before the " -";
$pattern2='/(?<=\s-\s).+/'    //This will match the string after the "- ";

Ответ 6

Explode или regexp являются излишними, попробуйте следующее:

$str = substr($str, 0, strpos($str,'-'));

или версию strtok в одном из ответов здесь.

Ответ 7

Используйте функцию strstr.

Пример:

$my_string = "This is my best string - You like it?";
$my_new_string = strstr($my_string, '-', true);

echo($my_new_string);