Регулярка для поиска русских слов в тексте

Регулярка для поиска русских слов в тексте

Последнее время многим отечественным компаниям не хватает русскоязычного рынка и очевидным решением является расширение на европейские просторы. Но почему-то к русским товарам и услугам англоязычные граждане относятся предвзято. Поэтому не редко, для улучшения продаж, организации представляются европейскими. И зачастую одним из инструментов продаж служит сайт, который должен быть на английском языке. А поскольку европейская версия сайта, почти всегда, это копия русского, то нужно максимально качественно перевести ее на иностранный язык. И мало того, что перевод должен быть качественным, еще нужно эти переводы аккуратно добавить на сайт. И тут начинается самое интересное: где-то на страницах остаются русские строчки, в js или html остаются русские комментарии, в alt-ах к картинкам и ссылкам остаются русские подписи и прочие мелочи, которые выдают русский след. С такой проблемой уже несколько раз приходилось сталкиваться, довольно сложно все проверить и протестировать. Поэтому, когда пришел очередной клиент с подобной проблемой, было решено упростить и ускорить работу тестировщика — написать небольшой скрипт, который автоматически будет сканировать страницу на наличие русских символов и слов.

Поиск кириллических символов на странице с помощью php

Поскольку основным языком, с которым я работаю – это php, то и поиск было решено писать на нем. По сути, задача очень простая: получить html-код страницы или js-скрипта и проверить весь текст на вхождение русских символов. В данном случае, для поиска идеально подходят регулярные выражения, вот только составить нужное, это всегда для меня головная боль. И этот случай не исключение – провозиться пришлось несколько часов. Основная сложность заключалась в том, что регистронезависимый поиск с помощью регулярки просто так не работает с русскими символами. Чтобы научить регулярку искать нужные символы как в нижнем, так и верхнем регистре, нужно использовать модификатор «u», он позволяет работать с текстом в кодировке UTF-8. А также потребуется второй модификатор – «i», он отвечает за регистронезависимый поиск. Вся регулярка будет выглядеть вот так:

 /([а-я]+)/ui 

Такое регулярное выражение позволяет найти символы и целые слова, состоящие из русских символов в любом регистре.

Поиск русских слов в тексте с помощью php

Регулярка составлена, теперь дело техники. Остается только написать несколько строк кода, они приведены чуть ниже. Чтобы было понятнее, в коде добавлены комментарии:

// страница, на которой будем искать кириллицу
$url = "http://php.net/manual/ru/function.preg-match-all.php";
// получаем html-код страницы
$page_html = @file_get_contents($url);
// если удалось получить страницу
if($page_html){	
	$pattern = '/([а-я]+)/ui';
	// находим все русские слова
	preg_match_all($pattern, $page_html, $matches);
	// если что-то нашлось
	if(!empty($matches)){
		// выводим по одному слову
		foreach($matches[0] as $word){
			echo $word . "<br>";
		}
	}
}
 

Послесловие

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

<form action="#" method="post">
	<textarea name="urls"></textarea>
	<br>
	<input type="submit" value="find">
</form>

И сам код нужно будет немного дополнить:

// если была отправлена форма
if($_POST["urls"]){
	// получаем все адреса страниц, разделенные переносом строки
	$array_urls = explode("\n", $_POST["urls"]);
	foreach($array_urls as $url){
		$url = trim($url); // уберем лишние пробелы
		// получаем html-код страницы
		$page_html = @file_get_contents($url);
		// если удалось получить страницу
		if($page_html){	
			$pattern = '/([а-я]+)/ui';
			// находим все русские слова
			preg_match_all($pattern, $page_html, $matches);
			// если что-то нашлось
			if(!empty($matches)){
				// выводим по одному слову
				foreach($matches[0] as $word){
					echo $word . "<br>";
				}
			}
		}
	}
}

Рассказать друзьям:


Оценить:
(6 оценок, среднее: 3,67 из 5)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code