2013-08-20 7 views
0

정규 표현식에 익숙하지 않습니다. 배열에서 첫 번째 일치 단어 다음에 특정 단어를 찾는 함수를 만들었습니다. 코드는특정 단어 다음에 단어 찾기

$searchkey1 = array('NUMBER', 'REF', 'TRANSACTION NUMBER'); 
$searchkey2 = array('CURRENT BALANCE RS.', 'NEW BALANCE IS'); 
$smsdata = "TRANSACTION NUMBER NER13082010132400255 TO RECHARGE 198 INR TO 9999999999 IS SUCCESSFUL. YOUR NEW BALANCE IS 8183.79 INR."; 

function get_details($searchkey, $smsdata) 
{ 
    foreach ($searchkey as $key) { 
     $result = preg_match_all("/(?<=(" . $key . "))(\s\w*)/", $smsdata, $networkID); 
     $myanswer = @$networkID[0][0]; 
    } 
    return $myanswer; 
} 

echo get_details($searchkey1, $smsdata); 
echo "<BR>"; 
echo get_details($searchkey2, $smsdata); 

다른 단어도 찾으려면이 기능을 사용하고 있습니다. 10 진수 값을 제외한 다른 단어를 찾기 위해 노력하고 있습니다. 여기 내 예제 코드에서 반환 값은 11192이지만 십진수는 11192.75로 표시하고 싶습니다.

제 오류를 수정하십시오.

$result=preg_match_all("/(?<=(".$key."))(\s\w*)/",$smsdata,$networkID); 

결과 NER13082010132400255 및 8183 // 여기서 demical은 무시됩니다.

$result=preg_match_all("/(?<=(".$key."))\s*(\d*\.?\d*)/",$smsdata,$networkID); 

이 결과를 제공 "빈"과 8183.79 // 여기에 첫 번째 결과가 비어

내 욕망의 결과는 NER13082010132400255 및 8183.79

+0

나는 그것이 다른 경우를의 – newcomer

+0

가능한 중복 일부에서 잘못된 결과를 얻을로 내 질문을 수정할 수 있습니다 이는 균형 제공 [정규식을 : 식 후 첫 번째 단어와 일치하는 방법 (HTTP : // 유래 .com/questions/546220/regex-how-to-first-after-an-expression) – hakre

답변

2

내가 \w이 기간을 커버 믿지 않는 것입니다. \d의 혼합물 \.

$result=preg_match_all("/(?<=(".$key."))(\s[\d\.]+)/",$smsdata,$networkID); 
+0

선생님, 제 질문을 수정했습니다. 친절하게 도와주세요. – newcomer

+0

답변을 수락하지 않고 질문을 다시 수정하십시오. 게다가 당신의 필요를 전하는 데 아주 나쁘다. 나는 너를 도울 수 없어. – DevZer0

1

영업의 정규 표현식은 최고의 공간을 너무 캡처를 사용합니다. @ DevZer0의 regexp도 마침표를 캡처합니다.

$result=preg_match_all("/(?<=(".$key."))\s*(\d*\.?\d*)/",$smsdata,$networkID); 
+0

awsome thanks. 제발 특정 단어 앞에 단어를 찾을 수있게 해주 시옵소서. – newcomer

+0

/\ w (? = \ s + 특정 단어)/ – jaeheung

+0

죄송합니다. 누락 더하기 .../\ w + (? = \ s + 특정 단어 \ b)/ – jaeheung

관련 문제