У меня есть строка, и я хочу получить все после определенного значения. Строка всегда начинается с набора чисел, а затем подчеркивания. Я хочу получить оставшуюся часть строки после подчеркивания. Например, если у меня есть следующие строки и что я хотел бы вернуть:
123_String -> String 233718_This_is_a_string -> This_is_a_string 83_Another Example -> Another Example
Как я могу сделать что-то подобное?
strpos()
находит смещение подчеркивания, затем substr захватывает все из этого индекса плюс 1 и далее.
$data = "123_String"; $whatIWant = substr($data, strpos($data, "_") + 1); echo $whatIWant;
Если вы также хотите проверить, существует ли символ подчеркивания ( _
) в вашей строке, прежде чем пытаться его получить, вы можете использовать следующее:
if (($pos = strpos($data, "_")) !== FALSE) { $whatIWant = substr($data, $pos+1); }
Вот метод с использованием explode
:
$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string
или:
$text = @end((explode('_', '233718_This_is_a_string', 2)));
Указав 2
для параметра limit
в explode()
, он возвращает массив с двумя максимальными элементами, разделенными разделителем строк. Возврат второго элемента ( [1]
) даст остальную часть строки.
Вот еще один лайнер с помощью strpos
(как было предложено @flu ):
$needle = '233718_This_is_a_string'; $text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string
strtok
– это пропущенная функция для такого рода вещей. Это должно быть довольно быстро.
$s = 233718_This_is_a_string; $firstPart = strtok( $s, '_' ); $allTheRest = strtok( '' );
Пустая строка, подобная этой, заставит остальную часть строки быть возвращенной.
NB, если ничего не было после «_», вы получили бы значение FALSE
для $allTheRest
которое, как указано в документации , должно быть проверено с помощью ===, чтобы отличить от других значений false.