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

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

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

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

Ответ 1

strpos() находит смещение подчеркивания, а затем substr захватывает все из этого индекса плюс 1 и далее.

$data = "123_String";    
$whatIWant = substr($data, strpos($data, "_") + 1);    
echo $whatIWant;

Если вы также хотите проверить, существует ли символ подчеркивания (_) в вашей строке, прежде чем пытаться его получить, вы можете использовать следующее:

if (($pos = strpos($data, "_")) !== FALSE) { 
    $whatIWant = substr($data, $pos+1); 
}

Ответ 2

strtok - пропущенная функция для такого рода вещей. Это должно быть довольно быстро.

$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' ); 

Пустая строка, подобная этой, принудительно возвращает остальную часть строки.

Примечание: если после '_' ничего не было, вы получите значение FALSE для $allTheRest, которое, как указано в документации, должно быть проверено с ===, чтобы отличить его от других ложные значения.

Ответ 3

Вот метод с использованием 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(), он возвращает массив с двумя максимальными элементами, разделенными строковым разделителем. Возвращение 2-го элемента ([1]), даст остаток строки.


Вот еще одна строка с использованием strpos (как предложено @flu):

$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string

Ответ 4

если кому-то нужно извлечь первую часть строки, то можете попробовать,

Запрос:

$s = "This_is_a_string_233718";

$text = $s."_".substr($s, 0, strrpos($s, "_"));

Выход:

This_is_a_string

Ответ 5

Другой простой способ, используя strchr() или strstr():

$str = '233718_This_is_a_string';

echo ltrim(strstr($str, '_'), '_'); // This_is_a_string

Ответ 6

$string = "233718_This_is_a_string";
$withCharacter = strstr($string, '_'); // "_This_is_a_string"
echo substr($withCharacter, 1); // "This_is_a_string"

В одном утверждении это будет.

echo substr(strstr("233718_This_is_a_string", '_'), 1); // "This_is_a_string"