<?php
/*«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
«жи» или «ши» написано с буквой ы
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними.
(можешь добавить еще несколько правил, если хорошо знаешь русский язык)
В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).*/
$coolStory = <<<EOF
Нас было 100 а он 1
сдесь нечего делать
сдесь никого нет
этажы
EOF
;
$regExp = "/(координально)|(сдесь)|(здела[лнюеть]{1,2})|([а-яё]{1}\\ s+а\\ s+)|([а-яё]{1}\\ s+но\\ s+)|([,\\ .!\\ ?:;][^\\ s])|(\\ s?[а-яё]*(жы|шы)[а-яё]*[\\ s\\ .,?!:;]+)/iUu" ;
/*
$possibleErrors = array (
1 => array ( "pattern" => "/координально/ui",
"message" => "- Ошибка в слове \"кардинально\"."
),
2 => array ( "pattern" => "/сдесь/ui",
"message" => "- Не \"сдесь\", а \"здесь\"."
),
3 => array ( "pattern" => "/здела[лнюет]{1,2}/ui",
"message" => "- Приставки \"з\" нет в русском языке."
),
4 => array ( "pattern" => "/\\s+а\\s+/ui" ,
"message" => "- Пропущена запятая перед союзом \"а\"."
),
5 => array ( "pattern" => "/\\s+но\\s+/ui",
"message" => "- Пропущена запятая перед союзом \"но\"."
),
6 => array ( "pattern" => "/[,\\.!\\?:;][^\\s]/ui",
"message" => "- Пропущен пробел после знака препинания."
),
7 => array ( "pattern" => "/\\s?[а-яё]*(жы|шы)[а-яё]*[\\s\\.,?!:;]+/" ,
"message" => "- \"Жи-Ши\" пиши с \"и\"!"
),
); */
"/координально/uUi" => " - Ошибка в слове \" кардинально\" ." ,
"/сдесь/uUi" => " - Не \" сдесь\" , а \" здесь\" ." ,
"/здела[лнюеть]{1,2}/uUi" => " - Приставки \" з\" нет в русском языке." ,
"/[а-яё]{1}\\ s+а\\ s+/uUi" => " - Пропущена запятая перед союзом \" а\" ." ,
"/[а-яё]{1}\\ s+но\\ s+/uUi" => " - Пропущена запятая перед союзом \" но\" ." ,
"/\\ s?[а-яё]*(жы|шы)[а-яё]*[\\ s\\ .,?!:;]+/uUi" => " \" - Жи-Ши\" пиши с \" и\" !" ,
"/[,\\ .!\\ ?:;][^\\ s]/uUi" => " - Пропущен пробел после знака препинания."
) ;
echo $coolStory . "\n \n " ;
$matches = $errs [ 0 ] ;
for ( $i = 0 ; $i < count ( $matches ) ; $i ++ ) { foreach ( $possibleErrors as $pattern => $message ) {
$notices [ $i ] = $message ;
}
}
}
$i = 0 ;
foreach ( $matches as $value ) {
$position = ( mb_strpos ( $coolStory , $value ) < 20 ) ?
0 : mb_strpos ( $coolStory , $value ) - 20 ;
$length = ( $position == 0 ) ?
mb_strpos ( $coolStory , $value ) : 20 ;
$contextPrev = mb_substr ( $coolStory , $position , $length ) ; $errNo = $i + 1 ;
echo "Ошибка" . $errNo . ":\" ..." ;
echo $contextPrev . $value . "$contextFollow ...\" " ;
echo $notices [ $i ] . "\n " ;
$i ++;
}
/*var_dump($errs); */
?>
PD9waHAKLyrCq0dyYW1tYXIgTmF6acK7LiDQndCw0L/QuNGI0Lgg0YHQutGA0LjQv9GCLCDQv9GA0L7QstC10YDRj9GO0YnQuNC5INGC0LXQutGB0YIg0L3QsCDQvdCw0LvQuNGH0LjQtSDQt9C70L7RgdGC0L3Ri9GFINC+0YjQuNCx0L7QujoKCtC90LXRgiDQv9GA0L7QsdC10LvQsCDQv9C+0YHQu9C1INC30LDQv9GP0YLQvtC5LCDRgtC+0YfQutC4INGBINC30LDQv9GP0YLQvtC5LCDQstC+0YHQutC70LjRhtCw0YLQtdC70YzQvdC+0LPQviDQt9C90LDQutCwLCDQstC+0L/RgNC+0YHQuNGC0LXQu9GM0L3QvtCz0L4g0LfQvdCw0LrQsCwg0LTQstC+0LXRgtC+0YfQuNGPCsKr0LbQuMK7INC40LvQuCDCq9GI0LjCuyDQvdCw0L/QuNGB0LDQvdC+INGBINCx0YPQutCy0L7QuSDRiwrQsiDRgtC10LrRgdGC0LUg0LXRgdGC0Ywg0YHQu9C+0LLQviDCq9C60L7QvtGA0LTQuNC90LDQu9GM0L3QvsK7INC40LvQuCDCq9GB0LTQtdGB0YzCuywgwqvQt9C00LXQu9Cw0LvCuywgwqvQt9C00LXQu9Cw0Y7CuywgwqvQt9C00LXQu9Cw0L3CuwrQsiDRgtC10LrRgdGC0LUg0LXRgdGC0Ywg0YHQu9C+0LLQsCDCq9Cwwrsg0LjQu9C4IMKr0L3QvsK7INCx0LXQtyDQt9Cw0L/Rj9GC0L7QuSDQv9C10YDQtdC0INC90LjQvNC4Lgoo0LzQvtC20LXRiNGMINC00L7QsdCw0LLQuNGC0Ywg0LXRidC1INC90LXRgdC60L7Qu9GM0LrQviDQv9GA0LDQstC40LssINC10YHQu9C4INGF0L7RgNC+0YjQviDQt9C90LDQtdGI0Ywg0YDRg9GB0YHQutC40Lkg0Y/Qt9GL0LopCgrQkiDRgdC70YPRh9Cw0LUg0L7QsdC90LDRgNGD0LbQtdC90LjRjyDQvtGI0LjQsdC60Lgg0YHQutGA0LjQv9GCINC00L7Qu9C20LXQvSDQv9C40YHQsNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC+0LEg0Y3RgtC+0Lwg0Lgg0LLRi9Cy0L7QtNC40YLRjCDQutGD0YHQvtC6INGC0LXQutGB0YLQsCDRgSDQvtGI0LjQsdC60L7QuSAo0YfRgtC+0LHRiyDQsdGL0LvQviDQv9C+0L3Rj9GC0L3Qviwg0YfRgtC+INC90LUg0YLQsNC6KS4qLwoKZXJyb3JfcmVwb3J0aW5nKC0xKTsKbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ3V0Zi04Jyk7CgokY29vbFN0b3J5ICAgICAgPSA8PDxFT0YK0J3QsNGBINCx0YvQu9C+IDEwMCDQsCDQvtC9IDEK0YHQtNC10YHRjCDQvdC10YfQtdCz0L4g0LTQtdC70LDRgtGMCtGB0LTQtdGB0Ywg0L3QuNC60L7Qs9C+INC90LXRggrRjdGC0LDQttGLCkVPRgogICAgOwokcmVnRXhwICAgICAgICAgPSAiLyjQutC+0L7RgNC00LjQvdCw0LvRjNC90L4pfCjRgdC00LXRgdGMKXwo0LfQtNC10LvQsFvQu9C90Y7QtdGC0YxdezEsMn0pfChb0LAt0Y/RkV17MX1cXHMr0LBcXHMrKXwoW9CwLdGP0ZFdezF9XFxzK9C90L5cXHMrKXwoWyxcXC4hXFw/OjtdW15cXHNdKXwoXFxzP1vQsC3Rj9GRXSoo0LbRi3zRiNGLKVvQsC3Rj9GRXSpbXFxzXFwuLD8hOjtdKykvaVV1IjsKLyoKJHBvc3NpYmxlRXJyb3JzID0gYXJyYXkgKAoxID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIv0LrQvtC+0YDQtNC40L3QsNC70YzQvdC+L3VpIiwgICAgICAgIAoibWVzc2FnZSIgPT4gIi0g0J7RiNC40LHQutCwINCyINGB0LvQvtCy0LUgXCLQutCw0YDQtNC40L3QsNC70YzQvdC+XCIuIgopLAoyID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIv0YHQtNC10YHRjC91aSIsCiJtZXNzYWdlIiA9PiAiLSDQndC1IFwi0YHQtNC10YHRjFwiLCDQsCBcItC30LTQtdGB0YxcIi4iCiksCjMgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi/Qt9C00LXQu9CwW9C70L3RjtC10YJdezEsMn0vdWkiLCAKIm1lc3NhZ2UiID0+ICItINCf0YDQuNGB0YLQsNCy0LrQuCBcItC3XCIg0L3QtdGCINCyINGA0YPRgdGB0LrQvtC8INGP0LfRi9C60LUuIgopLCAgCjQgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi9cXHMr0LBcXHMrL3VpIiAsIAoibWVzc2FnZSIgPT4gIi0g0J/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQv9GP0YLQsNGPINC/0LXRgNC10LQg0YHQvtGO0LfQvtC8IFwi0LBcIi4iCiksCjUgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi9cXHMr0L3QvlxccysvdWkiLCAKIm1lc3NhZ2UiICA9PiAiLSDQn9GA0L7Qv9GD0YnQtdC90LAg0LfQsNC/0Y/RgtCw0Y8g0L/QtdGA0LXQtCDRgdC+0Y7Qt9C+0LwgXCLQvdC+XCIuIgopLCAgCjYgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi9bLFxcLiFcXD86O11bXlxcc10vdWkiLAoibWVzc2FnZSIgPT4gIi0g0J/RgNC+0L/Rg9GJ0LXQvSDQv9GA0L7QsdC10Lsg0L/QvtGB0LvQtSDQt9C90LDQutCwINC/0YDQtdC/0LjQvdCw0L3QuNGPLiIKKSwgICAgICAKNyA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL1xccz9b0LAt0Y/RkV0qKNC20Yt80YjRiylb0LAt0Y/RkV0qW1xcc1xcLiw/ITo7XSsvIiAsIAoibWVzc2FnZSIgPT4gIi0gXCLQltC4LdCo0LhcIiDQv9C40YjQuCDRgSBcItC4XCIhIgopLCAgICAgICAgICAgIAoKKTsgKi8KJHBvc3NpYmxlRXJyb3JzID0gYXJyYXkoCiAgICAiL9C60L7QvtGA0LTQuNC90LDQu9GM0L3Qvi91VWkiID0+ICIgLSDQntGI0LjQsdC60LAg0LIg0YHQu9C+0LLQtSBcItC60LDRgNC00LjQvdCw0LvRjNC90L5cIi4iLAogICAgIi/RgdC00LXRgdGML3VVaSIgPT4gIiAtICDQndC1IFwi0YHQtNC10YHRjFwiLCDQsCBcItC30LTQtdGB0YxcIi4iLAogICAgIi/Qt9C00LXQu9CwW9C70L3RjtC10YLRjF17MSwyfS91VWkiID0+ICIgLSDQn9GA0LjRgdGC0LDQstC60LggXCLQt1wiINC90LXRgiDQsiDRgNGD0YHRgdC60L7QvCDRj9C30YvQutC1LiIsCiAgICAiL1vQsC3Rj9GRXXsxfVxccyvQsFxccysvdVVpIiA9PiAiIC0g0J/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQv9GP0YLQsNGPINC/0LXRgNC10LQg0YHQvtGO0LfQvtC8IFwi0LBcIi4iLAogICAgIi9b0LAt0Y/RkV17MX1cXHMr0L3QvlxccysvdVVpIiA9PiAiIC0g0J/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQv9GP0YLQsNGPINC/0LXRgNC10LQg0YHQvtGO0LfQvtC8IFwi0L3QvlwiLiIsCiAgICAiL1xccz9b0LAt0Y/RkV0qKNC20Yt80YjRiylb0LAt0Y/RkV0qW1xcc1xcLiw/ITo7XSsvdVVpIiA9PiAiIFwiLSDQltC4LdCo0LhcIiDQv9C40YjQuCDRgSBcItC4XCIhIiwKICAgICIvWyxcXC4hXFw/OjtdW15cXHNdL3VVaSIgPT4gIiAtINCf0YDQvtC/0YPRidC10L0g0L/RgNC+0LHQtdC7INC/0L7RgdC70LUg0LfQvdCw0LrQsCDQv9GA0LXQv9C40L3QsNC90LjRjy4iCik7CmVjaG8gJGNvb2xTdG9yeSAuICJcblxuIjsKJGVycnMgPSBhcnJheSgpOwpwcmVnX21hdGNoX2FsbCgkcmVnRXhwLCAkY29vbFN0b3J5LCAkZXJycyk7CiRtYXRjaGVzID0gJGVycnNbMF07CiRub3RpY2VzID0gYXJyYXkoKTsKCmZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRtYXRjaGVzKTsgJGkrKykgewogICAgZm9yZWFjaCAoJHBvc3NpYmxlRXJyb3JzIGFzICRwYXR0ZXJuID0+ICRtZXNzYWdlKSB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJHBhdHRlcm4sICRtYXRjaGVzWyRpXSkpIHsKICAgICAgICAgICAgJG5vdGljZXNbJGldID0gJG1lc3NhZ2U7CiAgICAgICAgfQogICAgfQogICAgCn0KJGkgPSAwOwoKZm9yZWFjaCAoJG1hdGNoZXMgYXMgJHZhbHVlKSB7CiAgICAkcG9zaXRpb24gPSAobWJfc3RycG9zKCRjb29sU3RvcnksICR2YWx1ZSkgPCAyMCkgPyAwIDogbWJfc3RycG9zKCRjb29sU3RvcnksICR2YWx1ZSkgLSAyMDsKICAgIAogICAgJGxlbmd0aCA9ICgkcG9zaXRpb24gPT0gMCkgPyBtYl9zdHJwb3MoJGNvb2xTdG9yeSwgJHZhbHVlKSA6IDIwOwogICAgCiAgICAkY29udGV4dFByZXYgICA9IG1iX3N1YnN0cigkY29vbFN0b3J5LCAkcG9zaXRpb24sICRsZW5ndGgpOwogICAgJGVyck5vICAgICAgICAgPSAkaSArIDE7CiAgICAkY29udGV4dEZvbGxvdyA9IG1iX3N1YnN0cigkY29vbFN0b3J5LCAkcG9zaXRpb24gKyAkbGVuZ3RoICsgbWJfc3RybGVuKCR2YWx1ZSksIDMwKTsKICAgIGVjaG8gItCe0YjQuNCx0LrQsCIgLiAkZXJyTm8gLiAiOlwiLi4uIjsKICAgIGVjaG8gJGNvbnRleHRQcmV2IC4gJHZhbHVlIC4gIiRjb250ZXh0Rm9sbG93Li4uXCIiOwogICAgZWNobyAkbm90aWNlc1skaV0gLiAiXG4iOwogICAgJGkrKzsKfQoKLyp2YXJfZHVtcCgkZXJycyk7ICovCgoKCj8+