2011-08-04 9 views
0

"오늘 밤 200,000 달러를 이길 수 있습니다. 지금 가입하십시오!"와 같은 문자열이 있습니다.PHP를 사용하여 다른 문자열에서 특정 문자열을 가져 오는 방법은 무엇입니까?

상금은 문자열에서 문자열로 바뀌므로 어떻게 든 PHP 정규식을 사용하거나 그렇게해야합니다.

PHP를 사용하여이 문자열에서이 값을 가져 오는 방법은 무엇입니까?

간단한 정규식 함수가 있습니까?

미리 감사드립니다. 당신은 preg_match 찾고있는

+0

수행해야 할 작업은 무엇입니까? 화폐 가치를 얻으시겠습니까? –

답변

1

, 나는 생각 :

preg_match("/\$[\d\,]+/", "You can win tonight $200,000. Sign up now!", $matches); 
# $matches[0] will be "$200.000" 

하면 무너 뜨 :
일반 표현식에서 특별한 의미를 갖는 달러 기호 (대한 정규 표현식의 모습, 그래서 우리는 백 슬래시로 이스케이프 , 그래서 리터럴 달러 기호로 찍은), 하나 이상의 숫자 (0-9)와 쉼표가 뒤에. preg_match 자체가 false를 반환하는 경우

주, 그것은 문자열이 정규 표현식과 일치하지 있기 때문에, 그 경우, 더 $match[0] 읽을 없을 것

0

이 일을 내가 볼 수있는 방법은 두 가지가 있습니다, 정규식 (느리게) 또는 폭발 (더 빠르지 만 정확하지는 않음)을 사용할 수 있습니다. 이점은 문자열에서 공백을 제거하면 RegEx가 계속 작동하지만 폭발이 갑자기 중단 될 수 있다는 것입니다. 정규 표현식과 http://www.php.net/manual/en/book.pcre.php에서와주의 할 http://www.regular-expressions.info/tutorial.html

한 가지에서 정규 표현식 정보 사이트의 PHP PCRE 페이지에 자신의 사용에 대한

$src = "You can win tonight $200,000. Sign up now!"; 
function get_amount($from){ 
    $src_tkns = explode(' ', $from); 
    foreach($src_tkns as $tkn){ 
    if(substr($tkn, 0, 1)==='$'){ 
     return (substr($tkn, -1, 1)=='.')?substr($tkn, 0, -1):$tkn; 
    } 
    } 
    return false; 
} 

function get_amount_regex($from){ 
    $r = '/\$[-+]?[0-9]*(\,?[0-9]+)+/'; 
    preg_match_all($r, $from, $res); 
    return is_array($res)?$res[0][0]:false; 
} 

print('Found: '.get_amount($src).'<br />'); 
print('Regex Found: '.get_amount_regex($src)); 

더는 위의 코드는 최적이 아닌 또는 모든 경우에 잡기 오류가 발생합니다. 일부 중요 작업에 사용하기 전에 알려진 유효 문자열과 유효하지 않은 문자열로 테스트를 수행해야합니다.

관련 문제