PHP Regex удалить все после символа

Итак, я видел пару статей, которые слишком глубоки, поэтому я не уверен, что удалить из выражений регулярных выражений, которые они делают.

Я в основном получил это

foo: бар до другого: bar; seg98y34g.? sdebvw h segvu (все идет действительно)

Мне нужно регулярное выражение PHP, чтобы удалить ВСЕ после двоеточия. первая часть может быть любой длины (но она никогда не содержит двоеточие, поэтому в обоих случаях выше я бы закончил

foo и anotherfoo

после того, как сделал что-то вроде этого ужасающего примера psuedo-code

$string = 'foo:bar'; $newstring = regex_to_remove_everything_after_":"($string); 

РЕДАКТИРОВАТЬ

после публикации этого вопроса, будет ли explode() работать достаточно надежно? Что-то вроде

 $pieces = explode(':', 'foo:bar') $newstring = $pieces[0]; 

explode будет делать то, о чем вы просите, но вы можете сделать это на один шаг, используя current .

 $beforeColon = current(explode(':', $string)); 

Я бы не использовал здесь регулярное выражение (которое предполагает некоторую работу за кулисами для относительно простого действия), и я бы не использовал strpos с substr (так как это могло бы эффективно проходить цепочку дважды). Самое главное, это дает человеку, который читает код с немедленным: «Ах, да, это то, что автор пытается сделать!» а не: «Подождите, что происходит снова?»

Единственное исключение – если вы знаете, что строка слишком длинная: я бы не взорвал файл 1 Гб. Вместо:

 $beforeColon = substr($string, 0, strpos($string,':')); 

Я также чувствую, что substr не так легко читать: в current(explode вы можете сразу увидеть разделитель без дополнительных вызовов функций, и есть только один случай переменной (что делает его менее подверженным человеческим ошибкам). read current(explode as «Я беру первый случай чего-либо до этой строки» в отличие от substr , который является «Я получаю подстроку, начиная с позиции 0 и продолжая до этой строки».

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

 $newstring = preg_replace("/(.*?):(.*)/", "$1", $string); 

Немного более кратким, чем другие примеры:

 current(explode(':', $string)); 

Вы можете использовать RegEx, который написал m.buettner, но его пример возвращает все до «:», если вы хотите, чтобы все после «:» просто использовало $ 2 вместо $ 1:

 $newstring = preg_replace("/(.*?):(.*)/", "$2", $string); 

Вы можете использовать что-то вроде следующего. demo: http://codepad.org/bUXKN4el

 <?php $s = 'anotherfoo:bar;seg98y34g.?sdebvw h segvu'; $result = array_shift(explode(':', $s)); echo $result; ?> 

Почему вы хотите использовать регулярное выражение?

 list($beforeColon) = explode(':', $string);