2010-02-03 2 views
2

내가정규식으로 문자열의 끝 부분을 제거

my_value/j/im<b*+èo[/h>e\ylo 

이있는 경우 나 문자열 /j/im<b*+èo[/h>e\ylo를 제거 만 반환하고 싶습니다 그래서, / 문자로 시작하는 문자열 모두에서 제거하기 위해 노력하고있어 my_value. str_replace으로 뭔가를 사용하려고 생각했지만 위대한 정규 프로그래머가 아니며 PHP로 연습하고 있습니다.

function clean_value ($value) { 
    return preg_replace ("^(/.*?)$", "", $value); 
} 

어떻게하면됩니까?

답변

5

정규식을 사용할 이유가 없습니다. strpos() 대신 substr()의 콤보를 사용하면 문자열이 항상 적어도 1 개 / 문자가있을 것이라는 점을 보장 할 수있는 경우

$original = 'my_value/j/im<b*+èo[/h>e\ylo'; 

$removed = substr($original, 0, strpos($original, '/')); 

은 위의 작동합니다. 알 수 없거나 모른다면 간단히 다음으로 수정하십시오 :

$removed = (strpos($original, '/') === false) 
      ? $original 
      : substr($original, 0, strpos($original, '/')); 
+0

'/'가 없다면,'strpos'는 * false *를 반환 할 것이고'substr'는 빈 문자열을 반환 할 것입니다. 단순화를 위해 +1 – Gumbo

+0

+1. preg은 배열로 폭발하는 것처럼 낭비입니다. – hobodave

+0

@ Gumbo - 그냥 생각하고 ... 업데이트 –

2

정규 표현식에서 delimiters을 잊어 버렸습니다. 그리고 ^/은 문자열이 /으로 시작해야합니다.

대신보십시오 :이 끝까지 처음 /에서 아무것도 제거

preg_replace("~/.*~", "", $value) 

.

+0

끝 부분에서 제거하는 방법은 무엇입니까? – geotheory

+0

@geotheory'/ [^ /] * $'을 시도해보십시오. – Gumbo

+0

Tx. str.split ("/") slice (0, str.split ("/"). 길이 -1) .join ('/'). concat ("/") ' – geotheory

2

당신은 당신의 정규 표현식에서 시작 caret를 제거해야합니다, 당신은 문자열의 나머지 얻기 위해 욕심 일치를 사용할 수 있습니다 간단한 일이 정규식없이 할 수

function clean_value ($value) { 
    return preg_replace ("/\/.*/", "", $value); 
} 
+0

죄송합니다. 단락 기호도 잊어 버렸습니다 ... : S가 수정되었습니다. –

3

$string = "my_value/j/im<b*+èo[/h>e\ylo"; 
$splitted = explode("/",$string,2); 
echo "$splitted[0]\n";