2013-08-20 3 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); 

Я использую эту функцию, чтобы узнать другие слова. и он работает находкой для любых других слов, кроме десятичного значения. Здесь, в моем примере кода, возвращаемое значение равно 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

возможный дубликат [Regex: Как соответствовать первое слово после выражения] (HTTP: // StackOverflow .com/questions/546220/regex-how-to-match-the-first-word-after-an-expression) – hakre

ответ

2

я не верю, что \w охватывает период. использовать смесь \d и \.

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

Сэр, я изменил свой вопрос, любезно помогите мне. – newcomer

+0

вы не принимаете ответ, а затем снова изменяете свой вопрос. плюс ваш очень плохой, чтобы сообщить ваши потребности. Я не могу вам помочь. – DevZer0

1

регулярное_выражение Ор захватывает ведущее место тоже. @ Регулярное выражение DevZer0 также захватывает конечную точку. Это дает только баланс:

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

awsome thanks. Можете ли вы посоветовать мне узнать слово до определенного слова. – newcomer

+0

/\ w (? = \ S + specific_word)/ – jaeheung

+0

извините, пропущенный плюс .../\ w + (? = \ S + specific_word \ b)/ – jaeheung