3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); static $text1 = ' Пароль: 0936 Спишется 1241р. Перевод на счет 410012124208089 '; static $text2 = ' Пароль: 3042 Спишется 1240,21р. Перевод на счет 410012124208089 '; static $text3 = ' Пароль: 3042 Спишется 1240,21 руб Перевод на счет 410012124208089 '; function parse(string $text): array { $count = preg_match_all(/** @lang RegExp */ '/ (?: # самое простое — кошелёк получателя. Считаем, что он 15 символов (?<address>\d{15}) # дальше самое сложное — сумма перевода. Может быть целым или с разделителем копеек, в этом и сложность # так как может быть целым, то нам нужно её отличить от кода подтверждения |(?: (?<sum> \d+ (?:[,.]{1}\d+|) ) # будем считать, что после суммы будет написана валюта. Иначе не угадать что — код, а что — сумма. # допустим, что может быть слитно или через пробелы # допустим, что по-английски или по-русски, с маленькой или с большой буквы (?i:\s*[рr]) ) # дальше опять просто — код подтверждения. Просто целое число |(?<code>\d+) ) /x', $text, $matches, PREG_SET_ORDER); var_dump($matches); die; if ($count !== 3) { throw new RuntimeException('Всё пропало, нужно писать новую регулярку'); } $sum = 0; $code = 0; $address = 0; for ($i = 0; $i < 3; $i++) { [$tempSum, $tempCode, $tempAddress] = [$matches['sum'][$i], $matches['code'][$i], $matches['address'][$i]]; if ($tempSum) { $sum = $tempSum; } if ($tempCode) { $code = $tempCode; } if ($tempAddress) { $address = $tempAddress; } } return compact('code', 'sum', 'address'); } echo $text1 . PHP_EOL; $result = parse($text1); var_dump($result); echo $text2 . PHP_EOL; $result = parse($text2); var_dump($result); echo $text3 . PHP_EOL; $result = parse($text3); var_dump($result);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/pG9n0
function name:  (null)
number of ops:  31
compiled vars:  !0 = $text1, !1 = $text2, !2 = $text3, !3 = $result
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    5     0  E >   BIND_STATIC                                              !0
   11     1        BIND_STATIC                                              !1
   17     2        BIND_STATIC                                              !2
   75     3        CONCAT                                           ~4      !0, '%0A'
          4        ECHO                                                     ~4
   76     5        INIT_FCALL                                               'parse'
          6        SEND_VAR                                                 !0
          7        DO_FCALL                                      0  $5      
          8        ASSIGN                                                   !3, $5
   77     9        INIT_FCALL                                               'var_dump'
         10        SEND_VAR                                                 !3
         11        DO_ICALL                                                 
   79    12        CONCAT                                           ~8      !1, '%0A'
         13        ECHO                                                     ~8
   80    14        INIT_FCALL                                               'parse'
         15        SEND_VAR                                                 !1
         16        DO_FCALL                                      0  $9      
         17        ASSIGN                                                   !3, $9
   81    18        INIT_FCALL                                               'var_dump'
         19        SEND_VAR                                                 !3
         20        DO_ICALL                                                 
   83    21        CONCAT                                           ~12     !2, '%0A'
         22        ECHO                                                     ~12
   84    23        INIT_FCALL                                               'parse'
         24        SEND_VAR                                                 !2
         25        DO_FCALL                                      0  $13     
         26        ASSIGN                                                   !3, $13
   85    27        INIT_FCALL                                               'var_dump'
         28        SEND_VAR                                                 !3
         29        DO_ICALL                                                 
         30      > RETURN                                                   1

Function parse:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 79) Position 1 = -2
filename:       /in/pG9n0
function name:  parse
number of ops:  57
compiled vars:  !0 = $text, !1 = $count, !2 = $matches, !3 = $sum, !4 = $code, !5 = $address, !6 = $i, !7 = $tempSum, !8 = $tempCode, !9 = $tempAddress
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   23     0  E >   RECV                                             !0      
   25     1        INIT_FCALL                                               'preg_match_all'
   26     2        SEND_VAL                                                 '%2F%0A++++++++%28%3F%3A%0A++++++++%23+%D1%81%D0%B0%D0%BC%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B5+%E2%80%94+%D0%BA%D0%BE%D1%88%D0%B5%D0%BB%D1%91%D0%BA+%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8F.+%D0%A1%D1%87%D0%B8%D1%82%D0%B0%D0%B5%D0%BC%2C+%D1%87%D1%82%D0%BE+%D0%BE%D0%BD+15+%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2%0A++++++++%28%3F%3Caddress%3E%5Cd%7B15%7D%29%0A%0A++++++++%23+%D0%B4%D0%B0%D0%BB%D1%8C%D1%88%D0%B5+%D1%81%D0%B0%D0%BC%D0%BE%D0%B5+%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D0%B5+%E2%80%94+%D1%81%D1%83%D0%BC%D0%BC%D0%B0+%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B0.+%D0%9C%D0%BE%D0%B6%D0%B5%D1%82+%D0%B1%D1%8B%D1%82%D1%8C+%D1%86%D0%B5%D0%BB%D1%8B%D0%BC+%D0%B8%D0%BB%D0%B8+%D1%81+%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC+%D0%BA%D0%BE%D0%BF%D0%B5%D0%B5%D0%BA%2C+%D0%B2+%D1%8D%D1%82%D0%BE%D0%BC+%D0%B8+%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C%0A++++++++%23+%D1%82%D0%B0%D0%BA+%D0%BA%D0%B0%D0%BA+%D0%BC%D0%BE%D0%B6%D0%B5%D1%82+%D0%B1%D1%8B%D1%82%D1%8C+%D1%86%D0%B5%D0%BB%D1%8B%D0%BC%2C+%D1%82%D0%BE+%D0%BD%D0%B0%D0%BC+%D0%BD%D1%83%D0%B6%D0%BD%D0%BE+%D0%B5%D1%91+%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D1%82%D1%8C+%D0%BE%D1%82+%D0%BA%D0%BE%D0%B4%D0%B0+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%0A++++++++%7C%28%3F%3A%0A++++++++++++%28%3F%3Csum%3E%0A++++++++++++++++%5Cd%2B%0A++++++++++++++++%28%3F%3A%5B%2C.%5D%7B1%7D%5Cd%2B%7C%29%0A++++++++++++%29%0A++++++++++++%23+%D0%B1%D1%83%D0%B4%D0%B5%D0%BC+%D1%81%D1%87%D0%B8%D1%82%D0%B0%D1%82%D1%8C%2C+%D1%87%D1%82%D0%BE+%D0%BF%D0%BE%D1%81%D0%BB%D0%B5+%D1%81%D1%83%D0%BC%D0%BC%D1%8B+%D0%B1%D1%83%D0%B4%D0%B5%D1%82+%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B0+%D0%B2%D0%B0%D0%BB%D1%8E%D1%82%D0%B0.+%D0%98%D0%BD%D0%B0%D1%87%D0%B5+%D0%BD%D0%B5+%D1%83%D0%B3%D0%B0%D0%B4%D0%B0%D1%82%D1%8C+%D1%87%D1%82%D0%BE+%E2%80%94+%D0%BA%D0%BE%D0%B4%2C+%D0%B0+%D1%87%D1%82%D0%BE+%E2%80%94+%D1%81%D1%83%D0%BC%D0%BC%D0%B0.%0A++++++++++++%23+%D0%B4%D0%BE%D0%BF%D1%83%D1%81%D1%82%D0%B8%D0%BC%2C+%D1%87%D1%82%D0%BE+%D0%BC%D0%BE%D0%B6%D0%B5%D1%82+%D0%B1%D1%8B%D1%82%D1%8C+%D1%81%D0%BB%D0%B8%D1%82%D0%BD%D0%BE+%D0%B8%D0%BB%D0%B8+%D1%87%D0%B5%D1%80%D0%B5%D0%B7+%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB%D1%8B%0A++++++++++++%23+%D0%B4%D0%BE%D0%BF%D1%83%D1%81%D1%82%D0%B8%D0%BC%2C+%D1%87%D1%82%D0%BE+%D0%BF%D0%BE-%D0%B0%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8+%D0%B8%D0%BB%D0%B8+%D0%BF%D0%BE-%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%2C+%D1%81+%D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%BE%D0%B9+%D0%B8%D0%BB%D0%B8+%D1%81+%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9+%D0%B1%D1%83%D0%BA%D0%B2%D1%8B%0A++++++++++++%28%3Fi%3A%5Cs%2A%5B%D1%80r%5D%29%0A++++++++%29%0A%0A++++++++%23+%D0%B4%D0%B0%D0%BB%D1%8C%D1%88%D0%B5+%D0%BE%D0%BF%D1%8F%D1%82%D1%8C+%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE+%E2%80%94+%D0%BA%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F.+%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE+%D1%86%D0%B5%D0%BB%D0%BE%D0%B5+%D1%87%D0%B8%D1%81%D0%BB%D0%BE%0A++++++++%7C%28%3F%3Ccode%3E%5Cd%2B%29%0A++++++++%29%0A++++%2Fx'
   47     3        SEND_VAR                                                 !0
          4        SEND_REF                                                 !2
          5        SEND_VAL                                                 2
          6        DO_ICALL                                         $10     
   25     7        ASSIGN                                                   !1, $10
   49     8        INIT_FCALL                                               'var_dump'
          9        SEND_VAR                                                 !2
         10        DO_ICALL                                                 
   50    11      > EXIT                                                     
   52    12*       IS_NOT_IDENTICAL                                         !1, 3
         13*       JMPZ                                                     ~13, ->18
   53    14*       NEW                                              $14     'RuntimeException'
         15*       SEND_VAL_EX                                              '%D0%92%D1%81%D1%91+%D0%BF%D1%80%D0%BE%D0%BF%D0%B0%D0%BB%D0%BE%2C+%D0%BD%D1%83%D0%B6%D0%BD%D0%BE+%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C+%D0%BD%D0%BE%D0%B2%D1%83%D1%8E+%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BA%D1%83'
         16*       DO_FCALL                                      0          
         17*       THROW                                         0          $14
   56    18*       ASSIGN                                                   !3, 0
   57    19*       ASSIGN                                                   !4, 0
   58    20*       ASSIGN                                                   !5, 0
   59    21*       ASSIGN                                                   !6, 0
         22*       JMP                                                      ->46
   60    23*       FETCH_DIM_R                                      ~20     !2, 'sum'
         24*       FETCH_DIM_R                                      ~21     ~20, !6
         25*       INIT_ARRAY                                       ~22     ~21
         26*       FETCH_DIM_R                                      ~23     !2, 'code'
         27*       FETCH_DIM_R                                      ~24     ~23, !6
         28*       ADD_ARRAY_ELEMENT                                ~22     ~24
         29*       FETCH_DIM_R                                      ~25     !2, 'address'
         30*       FETCH_DIM_R                                      ~26     ~25, !6
         31*       ADD_ARRAY_ELEMENT                                ~22     ~26
         32*       FETCH_LIST_R                                     $27     ~22, 0
         33*       ASSIGN                                                   !7, $27
         34*       FETCH_LIST_R                                     $29     ~22, 1
         35*       ASSIGN                                                   !8, $29
         36*       FETCH_LIST_R                                     $31     ~22, 2
         37*       ASSIGN                                                   !9, $31
         38*       FREE                                                     ~22
   61    39*       JMPZ                                                     !7, ->41
   62    40*       ASSIGN                                                   !3, !7
   64    41*       JMPZ                                                     !8, ->43
   65    42*       ASSIGN                                                   !4, !8
   67    43*       JMPZ                                                     !9, ->45
   68    44*       ASSIGN                                                   !5, !9
   59    45*       PRE_INC                                                  !6
         46*       IS_SMALLER                                               !6, 3
         47*       JMPNZ                                                    ~37, ->23
   72    48*       INIT_FCALL                                               'compact'
         49*       SEND_VAL                                                 'code'
         50*       SEND_VAL                                                 'sum'
         51*       SEND_VAL                                                 'address'
         52*       DO_ICALL                                         $38     
         53*       VERIFY_RETURN_TYPE                                       $38
         54*       RETURN                                                   $38
   73    55*       VERIFY_RETURN_TYPE                                       
         56*     > RETURN                                                   null

End of function parse

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
184.62 ms | 1407 KiB | 22 Q