#1 RX pharmacy affiliate program!

Archive for декабря 2008

Dec162008

Регулярные выражения. Парсинг на php

phpПеречитывая один из номеров журнала “Мой компьютер”, я наткнулся на одну полезную статейку, связанную с программированием на php. А конкретно речь шла о регулярных выражениях и парсингу ссылок с помощью них. Эти выражения позволяют легко находить в тексте не только участки по строгому совпадению с заданной строкой поиска, но и фрагменты, точный текст которых не известен, зато известна структура. Чтобы было понятнее – немного ниже приведу рассматриваемый пример ссылки.

Чтобы найти совпадение просто по определенному тексту в php, достаточно использовать функцию preg_match_all(), например в таком виде:

<?php preg_match_all(”/(1)(2)((3)4)5/”, “12345″, $m); ?>
<pre>
<?php print_r($m); ?>
</pre>


В данном случае функция выполняет сравнение первого выражение со вторым, и все имеющееся совпадения по тексту записывает в массив $m. Следовательно мы получим:

Array([0] => Array ([0] => 12345) [1] => Array ([0] => 1) [2] => Array ([0] => 2) [3] => Array ([0] => 34) [4] => Array ([0] => 3)).

Чтобы лучше понять эту систему можете поэкспериментировать с разным текстом. Ну а я иду дальше, собственно к использованию функции preg_match_all с регулярными выражениями, тоесть с совпадениями не по конкретному тексту а по его структуре.

Итак, теперь проводим операции с ссылкой (но запомните, здесь может быть любая строка, это не обязательно url) – http://www.rock-kingdom.com.ua/forum/kino/2651-gorod-boga.html. Чтобы найти совпадения этой строке не по символам, а по структуре текста – составляем регулярные выражения для отдельных групп символов. Итак:

  • http:// – (http:\/\/)?
  • www. – (www\.)?
  • rock-kingdom.com.ua – ([\d\w\-]+(\.[\d\w\-]+)*)
  • /forum/kino/2651-gorod-boga.html – ((\/([\d\w\-]+\/)+)([\d\w\.\-]+))?

Примечание: очень внимательно относитесь к каждому символу в регулярном выражении, не путайте разные слеши.

Из этого следует, что конечный результат будет таким:

  • (http:\/\/)?(www\.)?([\d\w\-]+(\.[\d\w\-]+)*)((\/([\d\w\-]+\/)+)([\d\w\.\-]+))?

это и есть структура нашей ссылки в виде регулярного выражения.

Теперь можно написать небольшую программку на php, которая будет разделять ссылку на составные части. Делаем так:

<html>
<head>
<title>Пример</title>
</head>
<body> <?
if (isset ($_REQUEST["url"]))
{
//обрабатываем текст, введенный в поле ввода
$result=preg_match_all(’/(http:\/\/)?(www\.)?([\d\w\-]+(\.[\d\w\-]+)*)((\/([\d\w\-]+\/)+)([\d\w\.\-]+))?/’, $_REQUEST["url"], $m);
}
?>
<form id=”checkform” name=”checkform” action=”example.php” method=”post”>
<table width=”60%”>
<tr>
<td width=”10%”>
URL:
</td>
<td>
<input type=”text” id=”url” name=”url” size=”15″ style=”width:100%”
value=”<?php echo $_REQUEST["url"]; ?>”>
</td>
</tr>
<tr>
<td colspan=”2″ align=”center”>
<input type=”submit” value=”Разделить”>
</td>
</tr>
</table>
</form>
<?// если был введен текст
if (isset($_REQUEST["url"]))
{
?>
<br>
<?// если было совпадение с паттерном
if ($result)
{
//выдаем результат
?>
<table>
<tr>
<td><b>Полный URL:</b></td>
<td><?php echo $m[0][0]; ?></td>
</tr>
<tr>
<td><b>Протокол:</b></td>
<td><?php echo $m[1][0]; ?></td>
</tr>
<tr>
<td><b>Доменное имя</b></td>
<td><?php echo $m[3][0]; ?></td></tr>
<tr>
<td><b>Запрошенный ресурс:</td></b>
<td><?php echo $m[5][0]; ?></td></tr>
<tr>
<td><b>Путь к ресурсу:</td><b>
<td><?php echo $m[6][0]; ?></td></tr>
<tr>
<td><b>Имя ресурса:</td></b>
<td><?php echo $m[8][0]; ?></td>
</tr>
</table>
<?
}
else
{
//иначе сообщаем что был введен некорректный URL
?>
Введенный текст не является URL
<?
}
}
?>
</body>
</html>

Примечание: если будете копировать этот код и запускать на веб-сервере, замените все кавычки на новые, без этого действия скрипт может отрабатывать не корректно.

В итоге наш парсинг ссылок с помощью использования функции preg_match_all() и регулярных выражений должен выглядеть так:

Парсинг ссылок

Ну вот и все, теперь такой ход можно свободно применять в своих работах. Если у кого-то есть вопросы – пишите, с удовольствием помогу.

----------------------------------

Понравилась статья? Подпишись на обновление блога через RSS или e-mail!

Читайте по этой теме:

Dec152008

Старт

СтартКогда начинал заниматься изучением веб-технологий и интернета в целом, почти с первых дней мечтал о создании сайта не для кого-то, а для себя лично. В последнее время мне приходиться читать много блогов схожих с родом моей деятельности и идея создания своего он-лайн дневника стала все более навязчивой.

И вот сейчас я пишу этот пост с улыбкой на лице, дошли руки что называется. На сей день я встречаю все больше и больше блогов попросту не нужных людям, я называю это “сетевым мусором”. И чтобы не оказаться в числе таких, я постараюсь быть полезным Вам и доступно описывать те проблемы и решения с коими приходится сталкиваться в интернете, будь-то разработка сайта, оптимизация или просто личные рекомендации и советы по построению своего бизнеса в сети. Обещаю, что не буду публиковать статьи только для того чтобы “было”, я сам понимаю насколько иногда важен и необходим качественный контент для решения своих проблем, и понимаю как плохо, когда среди всего мусора так тяжело отыскать нужную информацию.

Хочу, чтобы этот блог стал нитью для знакомства с интересными людьми и, возможно, партнерами. Я не ставлю перед собой цели заработка на этом ресурсе, наоборот попробую помочь заработать другим. И немного отходя от темы скажу, что в этом вопросе явно не хватит моих рекомендаций, нужно еще ваше стремление и желание работать в этой сфере. Всегда советовал людям работать там где нравится, а не там где немножко больше денег, я считаю, работа по духу приносит человеку состояние удовлетворенности собой.

Я надеюсь у меня получиться собрать некий круг читателей и реализовать те цели, которые я наметил для своего он-лайн дневника. Кстати зовут меня Артур, мне 19 лет, живу в Украине, город Запорожье. Немножко больше обо мне вы можете прочитать здесь.

----------------------------------

Понравилась статья? Подпишись на обновление блога через RSS или e-mail!

Читайте по этой теме: