2013-07-04 2 views
2

배열 문자열 값에 특정 문자열 행을 가져오고 싶습니다. 예 : (Avelino Curato) [email protected]. 이 예제 문자열에서는 문자열의 전자 메일 주소 부분 만 가져 오려고합니다. 나는 폭발 함수를 사용하여 시도했지만 그것을 배열 coz에서 더 이상 사용하지 않습니다 괄호 안에 문자열을 저장 싶지 않아. 나는 strtok을 사용하려고 시도했지만 strtok 함수는 문자열이 이렇게 보일 때 완벽하게 작동하는 것으로 보인다 ->[email protected] (Avelino Curato). strtok 함수를 사용하여이 문자열 값의 문자열 중 전자 메일 주소 부분을 얻는 방법은 무엇입니까 (Avelino Curato) [email protected]? 만약 내가 이것을 처리하는데 사용할 다른 문자열 함수가 없다면? 다음은 내 코드와 해당 출력PHP 문자열 함수가 배열 문자열 값의 특정 문자열을 가져 오는 중 함수

function try_explode(){ 

$store_array = array(); 
$val = array(
'0' => '[email protected](Avelino Curato)', 
'1' => 'ferdinand2apploma.com(Ferdinand Balbin)' 

); 

for($i=0;$i<sizeof($val);$i++){ 

    $store_array[$i] = strtok($val[$i],')'); 

} 

var_dump($store_array); 
} 

출력 : 위의 출력은 내가 얻고 싶었다,하지만 결과입니다

enter image description here

나도 같은 출력을 얻을 수있을 것입니다 방법 이 배열 문자열 값을 제자리에 두었습니까?

$val = array(
'0' => '(Avelino Curato)[email protected]', 
'1' => '(Ferdinand Balbin)ferdinand2apploma.com' 

); 

전자 메일 주소 부분을 얻으려면 strtok를 어떻게 사용할 수 있습니까? 그렇지 않다면이 문자열에 사용할 수있는 다른 문자열 함수는 무엇입니까? 고마워요

답변

4
$val = '(Avelino Curato)[email protected]'; 
$email = ltrim(strstr($val, ')'), ')'); 

echo $email; // [email protected] 

[[DEMO] 당신이 후에 무엇 싶어 당신이 strtok()를 사용하지 것이다 번째 예를 들어

괄호를 얻으려면 strstr()을 사용하면 괄호와 그 뒤에 오는 모든 것을 얻을 수 있습니다. 그런 다음 괄호를 문자열.

$val = '(Avelino Curato)[email protected]'; 
//$val = '[email protected](Avelino Curato)'; 
$email = strip_tags(strtr($val, '()', '<>')); 

echo $email; // [email protected] 

는 [[DEMO]

이것은 모두 경우에 작동하고를 사용하는 PHP를 필요로하지 않습니다 당신이 창조적하려면

이 작업을 수행 할 수 있습니다 정규식 엔진. 기본적으로 여는 괄호와 닫는 괄호를 HTML 태그로 간주되는 여는 괄호와 닫는 괄호로 변환 한 다음 strip 태그를 실행하면 해당 부분이 제거됩니다. 간단하고, 빠르고, 이해하기 쉽습니다.

+0

와우. 감사합니다. 간단하고 깨끗한 방법. – Eli

0
$string = '[email protected](Avelino Curato)'; 
if(preg_match('~^(.+?)\\((.+?)\\)$~', $string, $matches)){ 
    var_dump(array_map('trim', $matches)); 
}elseif(preg_match('~^\\((.+?)\\)(.+?)$~', $string, $matches)){ 
    var_dump(array_map('trim', $matches)); 
} 

^이것을 시도하십시오! 정규식은 최고입니다.

PS : 문자열 토큰 화 당신이하고있는 일에 대한 의미하지 ...입니다! 인생을 간단하게 유지하십시오. RegEx을 배우십시오.

+0

나는이 예제에서 문자열 => [email protected] (Avelino Curato)을받은 이메일을 이미 받았습니다. 문제는이 문자열 값 => (Avelino Curato) [email protected]입니다. 어쨌든, 도와 줘서 고마워. – Eli

+0

@Avelino 당신을 위해 그것을 고쳤습니다. 하나가 실패하면 뒤집어보십시오. – CodeAngry

+0

PHP의 문자열 함수가 쉽게 수행 할 수없는 복잡한 패턴 매칭이 필요하지 않다면 더 느리고 실제로 사용해서는 안되는 정규식을 사용하려고한다면 'preg_replace ('/ \ ([^)] + \) /', '', $ str)'를 사용하여 이메일을 남겨둔 괄호 부분을 제거하십시오. 이 두 가지 상황에서 작동합니다. See [** demo **] (http://viper-7.com/h1ojpV) –

0

이 코드를 사용해보십시오.

$val = array(
    '0' => '(Avelino Curato)[email protected]', 
    '1' => '(Ferdinand Balbin)[email protected]', 
    '2' => '[email protected](Ferdinand Balbin)' 

); 

array_walk($val, function(&$value) { /* Use array walk to loop trough the array */ 

    $matches = array(); //create array to preserve matches after preg_match 

    preg_match('/[A-Za-z0-9_-][email protected][A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/', $value, $matches); 

    $value = $matches[0]; //set the [0] match in value 
}); 

print_r($val); 
0

내 작은 예를보십시오

function try_explode(){ 

    $store_array = array(); 
    $val = array(
     '0' => '[email protected](Avelino Curato)', 
     '1' => 'ferdinand2apploma.com(Ferdinand Balbin)' 
    ); 

    foreach ($val as $key => $value) { 
     $names[$key] = preg_replace("/.*\(([^\)]+)\)$/is", "\$1", $value); 
     $emails[$key] = preg_replace("/^([^\(]+).*/is", "\$1", $value); 
     $store_array[$key] = "(".$names[$key].") ".$emails[$key]; 
    } 
    var_dump($names); 
    var_dump($emails); 
    var_dump($store_array); 
} 
+0

다른 변수에 이름과 이메일을 가질 수 있습니다. – user2529525

+0

나는이 예제에서 문자열 => [email protected] (Avelino Curato)을받은 이메일을 이미 받았습니다. 문제는이 문자열 값 => (Avelino Curato) [email protected]입니다. 어쨌든, 도와 줘서 고마워. – Eli

+0

아, 내 부주의 때문에 죄송합니다. – user2529525

관련 문제