52568.fb2
$pattern = "!\s[А-Яа-я]+".
"\s([А-Я]\.\s*)([А-Я]\.\s*)$!m";
// шаблон ограничен восклицатель-
// ными знаками, m – модификатор,
// включающий многострочный режим
// первый \s означает, что перед
// фамилией должен идти пустой
// символ (например, пробел)
// [А-Яа-я] задает одну из букв
// алфавита в любом регистре,а в
// комбинации со знаком плюс
// определяет,что эта буква
// повторяется один и более
// раз следующий \s означает, что
// между фамилией и инициалами
// должен быть пробел
// Далее идет подвыражение,
// определяющее инициалы.
// Это буква от А до Я, после
// которой стоит точка ('\.')
// Экранируем точку, чтобы
// избавиться от ее специального
// значения. После буквы с точкой
// может идти или не идти пробел
// или несколько. Вся конструкция
// повторяется минимум два раза.
// Последний символ $ означает,
// что фамилия с инициалами
// должны находиться в конце
// строки.
//осуществляем поиск
$n = preg_match_all ($pattern,
$str, $res);
// выводим результаты
for ($i=0;$i<$n;$i++)
echo htmlspecialchars($res[0][$i]).
"<br>";
?>
Примеры ( | и .)
- Пусть имеется некий текст. Нам нужно найти всех упомянутых в нем людей со званиями.
<?
$str = "Доцент Смирнов совершил".
"открытие. Его учителем была ".
"профессор Иванова. ".
"Этим открытием Смирнов ".
"завоевал себе степень ".
"доктора. Раньше он был ".
"только кандидат.";
$pattern = "/(профессор|доцент)".
"\s[А-Яа-я]+(\s|\.)/i";