Как сохранить 2 символа перед определенным набором строк в массиве php - PullRequest
0 голосов
/ 27 января 2019

У меня есть содержимое текстового файла в строке php.Теперь я хочу сохранить два символа перед следующими строками - "(A)","(B)","(C)","(B+)" Например, если переменная php содержит что-то вроде -

33(F) 15352(1) 24 31 55(B+) 15360(1) 6 32 38 70(A) 2 3 4 5 6 7 8 9 10
10
*Passed with Grace Marks
*SID:  Student  ID;                          SchemeID:  The  scheme  
applicable  to  the  student.
Date on which pdf made: 09/10/2018
RTSID: 2018100901520151640002

Тогда я хочу сохранить 33,70 в массиве,Обратите внимание, что я хочу создать числовой массив.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Другой вариант заключается в использовании preg_match_all и захвате 1+ цифр \d+ (или 2 цифр точно \d{2} в группе захвата с последующим сопоставлением символа в верхнем регистре с последующим дополнительным знаком плюс \([A-Z]\+?

Затем из полученного массива преобразуйте значения, используя array_map и intval .

Например:

$re = '/(\d+)\([A-Z]\+?\)/';
$str = '33(F) 15352(1) 24 31 55(B+) 15360(1) 6 32 38 70(A) 2 3 4 5 6 7 8 9 10
10
*Passed with Grace Marks
*SID:  Student  ID;                          SchemeID:  The  scheme  
applicable  to  the  student.
Date on which pdf made: 09/10/2018
RTSID: 2018100901520151640002';

preg_match_all($re, $str, $matches);
var_dump(array_map('intval',$matches[1]));

Result

array(3) {
  [0]=>
  int(33)
  [1]=>
  int(55)
  [2]=>
  int(70)
}

Php demo

0 голосов
/ 27 января 2019

Это гораздо лучший ответ, чем мой (автор @Andreas):

    $re = '/(\d+)\(([A-Z]\+?)\)/m';
    $str = '33(F) 15352(1) 24 31 55(B+) 56(B+) 15360(1) 6 32 38 70(A) 2 3 4 5 6 7 8 9 10
    10
    *Passed with Grace Marks
    *SID:  Student  ID;                          SchemeID:  The  scheme  
    applicable  to  the  student.
    Date on which pdf made: 09/10/2018
    RTSID: 2018100901520151640002';


    preg_match_all($re, $str, $matches);
    $res = array_map(function($x, $y){
        return [$y, $x];
    },$matches[1], $matches[2]);
    print_r($res);

Для одного входа это сработает, и это не самое лучшее:

      function f(){
        $inputs = '33(F) 15352(1) 24 31 55(B+) 15360(1) 6 32 38 70(A) 2 3 4 5 6 7 8 9 10
        10
        *Passed with Grace Marks
        *SID:  Student  ID;                          SchemeID:  The  scheme  
        applicable  to  the  student.
        Date on which pdf made: 09/10/2018
        RTSID: 2018100901520151640002';

        $a=strpos($inputs,'(A)');
        $b=substr($inputs, $a-2,2);
        var_dump($b);
      }

    f();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...