Всем привет, немного не могу разобраться с регулярными выражениями. Имеется строка вида:
FORMTEXT Рыбаков(фамилия)(группа крови)(дата определения) FORMTEXT Владимир FORMTEXT Владиславович(имя, отчество)(резус)(подпись врача) FORMTEXT
Как можно посредством регулярных выражений через php вытащить отсюда фамилию, имя и отчество? Соответственно должно получится: Рыбаков Владимир Владиславович.
Организовать поиск по ключевому слову FORMTEXT, за которым следует один пробел \s - после пробела, собственно искомое слово \w+, а за этим словом альтернативный выбор: или скобка (, или пробел с ключевым словом \sFORMTEXT. Чтобы ключевые слова с пробелами не попадали в результат выборки, можно заключить их в конструкции назад и вперёд смотрящих проверок: (?<=FORMTEXT\s) и (?=\(|\sFORMTEXT) соответственно. Целиком шаблон примет вид: (?<=FORMTEXT\s)\w+(?=\(|\sFORMTEXT), а вместе с php всё будет выглядеть так:
$str = 'FORMTEXT Рыбаков(фамилия)(группа крови)(дата определения) FORMTEXT Владимир FORMTEXT Владиславович(имя, отчество)(резус)(подпись врача) FORMTEXT';
$patt = '~(?<=FORMTEXT\s)\w+(?=\(|\sFORMTEXT)~u';
preg_match_all($patt, $str, $arr);
$result = $arr[0] ?? false;
echo join(' ', $result);
Результат:
Рыбаков Владимир Владиславович
Сборка персонального компьютера от Artline: умный выбор для современных пользователей