@0lyans

Как правильно построить регулярное выражение И. О. Фамилия, отсекая ненужное?

Осуществляю поиск в файле формата И. О. Фамилия (на русском или английском). Так как текст берётся из PDF, некоторые строки слиплись и не могу разобраться, как указать конец Фамилии, чтобы дальше не шла другая строка. Наверное, это нужно указывать через [а-яёa-z]$, но так данные не находятся. Вот пример регулярного выражения, что я имею на данный момент:
$result=preg_grep ('/[А-ЯA-Zа-яa-z]\.[А-ЯA-Zа-яa-z]{1,2}. [А-ЯA-Z]/u', $pdfArr );


Результатом выходят следующие строки:
[182] => A.Sh. Akysh(Akishev)p
[567] => A.Sh. Akysh(Akishev)Proof.
[913] => A.Sh. Akysh(Akishev)
[962] => А.Ш. Акыш (Акишев)

Что необходимо дописать в выражение, чтобы получать только И. О. Фамилия? (можно с фамилией из скобки или без неё)
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
д'Артаньян / О'Брайен
ван Вейден / ди Каприо
Щекочихин-Подъяченский (кстати, тут в транслите тоже будет апостроф)
И. Ньютон и просто Платон
П. Д. Х. Ф. де П. Х. Н. М. де лос Р. С. де ла С. Т. М. П. Руис-и-Пикассо :)
J. Nesbø, наконец

В целом, регулярка для ФИО - это максимум временный инструмент для выковыривания того, что получилось, и доводки руками.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Во-первых, в PHP нет такой функции, есть preg_match(). Во-вторых, если вам нужен результат поиска - нужно кое-что использовать:
if (preg_match('/([а-яёa-z]\. *[а-яёa-z]{1,2}\. *[а-яёa-z-]+)/iu', $pdfArr, $match)){
    echo($match[1]);
}

В-третьих, лучше использовать preg_match_all(), см. документацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы