Вход/Регистрация
Курс "Язык программирования PHP"
вернуться

Савельева Нина Владимировна

Шрифт:

// что фамилия с инициалами

// должны находиться в конце

// строки.

//осуществляем поиск

$n = preg_match_all ($pattern,

$str, $res);

// выводим результаты

for ($i=0;$i<$n;$i++)

echo htmlspecialchars($res[0][$i]).

"<br>";

?>

Примеры ( | и .)

– Пусть имеется некий текст. Нам нужно найти всех упомянутых в нем людей со званиями.

<?

$str = "Доцент Смирнов совершил".

"открытие. Его учителем была ".

"профессор Иванова. ".

"Этим открытием Смирнов ".

"завоевал себе степень ".

"доктора. Раньше он был ".

"только кандидат.";

$pattern = "/(профессор|доцент)".

"\s[А-Яа-я]+(\s|\.)/i";

// осуществляем поиск

$n = preg_match_all ($pattern, $str,

$res);

// выводим результаты

for ($i=0;$i<$n;$i++)

echo htmlspecialchars($res[0][$i]).

"<br>";

?>

Метасимвол прямая черта « | » позволяет задавать альтернативные варианты. В примере мы хотели найти всех профессоров или доцентов. Для этого было создано подвыражение «(профессор|доцент)». После звания через пробел фамилия человека, которому оно принадлежит, – для этого существует комбинация «\s[А-Яа-я]+». После фамилии идет либо опять пробел, либо точка, если это конец предложения. Получаем опять два альтернативных варианта: «(\s|\.)» (здесь точка экранируется обратным слэшем, чтобы она понималась как обычная точка, без специального значения).

Подвыражения (подшаблоны)

В нескольких примерах мы уже использовали подвыражения. Настало время разобраться, что же это такое и какими свойствами они обладают

В РВ подшаблоны выделяют, заключая в круглые скобки. Для их обозначения кроме термина «подшаблон» также используют термин «подвыражение». Подшаблоны могут быть вложенными. Выделение части регулярного выражения в виде регулярного подвыражения делает следующее.

Например, шаблон

жар(кое|птица|)

– совпадает с одним из слов «жаркое», «жарптица» и «жар». Тогда как без скобок это было бы «жаркое», «птица» и пустая строка.

Например, имеется такой шаблон:

победитель получит

((золотую|позолоченный)

(медаль|кубок))

– и строка, в которой ищутся совпадения с этим шаблоном: «победитель получит золотую медаль». Тогда кроме этой фразы будут еще захвачены и выданы как результаты поиска следующие совпадения в подвыражениях: «золотую медаль», «золотую», «медаль», пронумерованные 1, 2, 3 соответственно.

Однако это не всегда удобно. Для того чтобы избавиться от «захватывающего» эффекта подвыражения, после открывающей скобки пишут «?:». Тогда это подвыражение в результат поиска не включается и при нумерации остальных подшаблонов с «захватывающим» эффектом не учитывается.

победитель получит

((?:золотую|позолоченный)

(медаль|кубок))

Тогда в условиях предыдущего примера получим искомую строку «победитель получит золотую медаль» и строки «золотую медаль», «медаль», пронумерованные 1 и 2 соответственно.

Если в html-файле название находится после <body> и отделено от него только пробелами или переводами строк, заключено в тег <h1> и после него тоже может идти сколько-то пробелов и переводов строк, то его можно найти с помощью следующего скрипта:

<?

//считываем файл в строку

$str = file_get_contents('1.htm');

$pattern = "/<body.*?>[\n\s]*<h1>".

"(.*?)<\/h1>[\n\s]*/m";

// осуществляем поиск

$n = preg_match_all ($pattern, $str, $res);

echo $res[1][0]; // выводим заголовок

?>

Заметим, что здесь выводится первое захваченное подвыражение, поскольку нам интересно только само название, а не все РВ. Так как в этом РВ есть только одно подвыражение, то его значение содержится в нулевом элементе первого массива результатов.

Повторения (квантификаторы)

  • Читать дальше
  • 1
  • ...
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: