Как получить все после определенного персонажа?

У меня есть строка, и я хочу получить все после определенного значения. Строка всегда начинается с набора чисел, а затем подчеркивания. Я хочу получить оставшуюся часть строки после подчеркивания. Например, если у меня есть следующие строки и что я хотел бы вернуть:

123_String -> String 233718_This_is_a_string -> This_is_a_string 83_Another Example -> Another Example 

Как я могу сделать что-то подобное?

Solutions Collecting From Web of "Как получить все после определенного персонажа?"

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.