Итак, я видел пару статей, которые слишком глубоки, поэтому я не уверен, что удалить из выражений регулярных выражений, которые они делают.
Я в основном получил это
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);