2011-01-16 3 views

답변

61

정규식에 대한 필요가 없습니다. 당신은 explode를 사용할 수 있습니다

$str = array_shift(explode('-', $str)); 

또는 substrstrpos :

$str = substr($str, 0, strpos($str, '-')); 

어쩌면 trim와 함께 선두와 공백을 후행 제거합니다.

업데이트 : @ 마크는 당신이 얻고 자하는 부분에 -이 있으면 실패 할 것이라고 지적했습니다. 그것은 모두 당신의 가능한 입력에 달려 있습니다.

그래서 당신이 마지막 대시 후, 당신은 문자열의 마지막에 출현 발견 strrpos, 사용할 수있는 모든 것을 제거 할 가정 : 당신이 볼 그래서

$str = substr($str, 0, strrpos($str, '-')); 

을 필요하지 정규 표현식이 없다;)

+1

두 번 질주 이름에 대한 실패 : http://ideone.com/NiIA1 –

+0

@ 마크 바이어스 : 따라 달라집니다, 그것은 여전히 ​​그 후의 모든 사항을 제거하는'-' 질문의 요구로 ;)하지만 문제의 구조를 고려할 때, 이것은'-'(공간 빼기)에서 폭발시킴으로써 해결할 수 있습니다. –

+3

+1 솔루션을 수정합니다. :) –

6

당신은 사용할 수 strtok :

$x = strtok($x, '-'); 
+0

더블 바렐 이름에 실패 : http://ideone.com/W4TNM –

9

이 후 모든 것을 제거하려면 하이픈 당신은 당신의 코드에서이 정규 표현식을 사용할 수 있습니다

"/-[^-]*$/" 

http://ideone.com/gbLA9

:

"/-.*$/" 

당신이 정규 표현식을 사용할 수있는 마지막 하이픈 후 모든 것을 제거하려면 결과의 끝에서 공백을 제거하는 것과 이것을 조합 할 수도 있습니다 :

"/\s*-[^-]*$/" 
0

내가

$pattern1='/.+(?=\s-)/'  //This will match the string before the " -"; 
$pattern2='/(?<=\s-\s).+/' //This will match the string after the "- "; 
0

폭발] = 이러한 패턴은 당신을 도울 것입니다 희망 또는 정규 표현식은 잔인한이며,이 시도 :

$str = substr($str, 0, strpos($str,'-'));

또는 여기에 대한 답변 중 하나에서 strtok를 버전을 .

+1

더블 바렐 이름에 실패 : http://ideone.com/Ufu3h 작동 솔루션은 http://stackoverflow.com/questions를 참조하십시오./4705167/how-to-remove-anything-in-a-string-after/4705179 # 4705179 –

4

사용할 수도 있습니다.

strstr("John Chio - Guy", "-", true) . '-'; 

세번째 파라미터 true 번째 파라미터의 첫번째 발생하기 전에 모든 반환하는 기능을 말한다.

Source on strstr() from php.net

+0

당신의 솔루션은 '$ str = substr ($ str, 0, strpos ($ str,'- '))); ' 위의 몇 가지 답변에서 주어진대로? 그것이 중첩 된 함수를 사용하지 않는다는 사실에 근거하여, 나는 더 효율적이라고 가정 할 것이지만 반드시 그런 것은 아닙니다. 어떤 생각? –

-1

사용 strstr 기능.

예 :

$my_string = "This is my best string - You like it?"; 
$my_new_string = strstr($my_string, '-', true); 

echo($my_new_string); 
+0

이것은 PHP 5.3+에서 작동합니다 –

+0

이것은 약 8 개월 전의 user2453885에서 주어진 답과 근본적으로 같습니다. –

관련 문제