특정 캐릭터 뒤에 모든 것을 얻는 방법?


140

나는 문자열을 가지고 있으며 특정 값 이후에 모든 것을 얻고 싶습니다. 문자열은 항상 일련의 숫자와 밑줄로 시작합니다. 밑줄 뒤에 나머지 줄을 가져오고 싶습니다. 예를 들어 다음 문자열이 있고 내가 원하는 것을 반환하는 경우 :

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

이런 식으로 어떻게 할 수 있습니까?

답변:


333

strpos()발견은 다음 SUBSTR 이후, 해당 인덱스 플러스 1에서 모든 것을 잡고, 밑줄의 오프셋 (offset)입니다.

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

밑줄 문자 ( _)가 문자열 에 있는지 확인 하기 전에 문자열을 찾으려면 다음을 사용할 수 있습니다.

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

2
밑줄이 있는지 확인하는 가장 좋은 방법은 무엇입니까 (예 : 선택 사항).
존 매그놀리아

2
@JohnMagnolia : 그럼 당신은 그냥 사용할 수 있습니다if (($pos = strpos($data, "_")) !== FALSE) { $whatIWant = substr($data, $pos+1); }
Amal Murali

11
@JohnMagnolia 또는 약간 공상적인 1 개의 강선 : substr($data, (strrpos($data, '_') ?: -1) +1).
flu

2
@flu 나는 당신이 말하기가 더 어렵다고 생각합니다. 줄이 적다고해서 더 멋진 것은 아닙니다.
MH

이 함수는 부분 문자열 / 문자 뒤에 문자열을 반환하거나 바늘을 찾을 수 없으면 false를 반환합니다.function StrAfterStr($S, $H) { return (($P = strpos($S, $H)) !== false) ? substr($S, $P + 1) : false; }
Marcodor

14

strtok이런 종류의 일에 간과 된 기능입니다. 꽤 빠르다.

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

이와 같이 빈 문자열은 나머지 문자열을 강제로 반환합니다.

* 참고 : '_'당신이 얻을 것 결국에 아무것도 없었다 경우 FALSE$allTheRest에 명시된 바와 같이하는 문서 다른 falsy 값과 구분하기 위해, === 테스트해야는.


3
주의 : strtok은 문자열 의 첫 번째 문자 인 경우 문자열 뒤에 문자열의 일부를 반환합니다 . 예를 들어, 예상 한대로 빈 문자열이 아닌 strtok('a_b', '_')반환 a하지만 strtok('_b', '_')반환합니다 b.
Quinn Comendant

9

다음을 사용하는 방법이 있습니다 explode.

$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string

또는:

$text = @end((explode('_', '233718_This_is_a_string', 2)));

2limit매개 변수 를 지정 explode()하면 문자열 구분 기호로 구분 된 최대 요소 2 개가 포함 된 배열이 반환됩니다. 두 번째 요소 ( [1])를 반환 하면 나머지 문자열이 제공됩니다.


다음을 사용하여 또 다른 one-liner가 있습니다 strpos( @flu에서 제안한 대로 ).

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

2

누군가 문자열의 첫 부분을 추출해야한다면 시도해 볼 수 있습니다.

질문:

$s = "This_is_a_string_233718";

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

산출:

This_is_a_string


2

strchr () 또는 strstr ()을 사용하는 또 다른 간단한 방법 :

$str = '233718_This_is_a_string';

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

1
$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"

0

strrchr ()을 사용합니다. 예를 들어 파일의 확장자를 찾으려면이 기능을 사용하십시오.

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns ".jpg"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.