vd
Новичок
Проблемы с регулярными выражениями
Имеется файл состоящий из блоков подобной структуры:
flag *I:
#
# Первое склонение: существительные ж.р., оканчивающиеся на -а
#
[^ГЖКХЧШЩ] А > -А,Ы # стена > стены (р.п.)
[ГЖКХЧШЩ] А > -А,И # киска > киски (р.п.)
А > -А,Е # стена > стене (д.п.)
А > -А,У # стена > стену (в.п.)
[^ЖЦЧШЩ] А > -А,ОЙ # стена > стеной (т.п.)
# устаревшая форма
[^ЖЦЧШЩ] А > -А,ОЮ # стена > стеною (т.п.)
# окончание в т.п. слов на [жцчшщ]а зависит от ударения, но преимущественно так:
[ЦЧШЩ] А > -А,ЕЙ # куча > кучей (т.п.)
# устаревшая форма
[ЦЧШЩ] А > -А,ЕЮ # куча > кучею (т.п.)
[^К] А > -А,- # стена > стен (мн,р.п.)
[^АЕЖИЙОУЦЧШЬЫЮЯ] К А > -КА,ОК # киска > кисок (мн,р.п.)
[АЕИОУЫЮЯ] К А > -КА,К # гадюка > гадюк (мн.,р.п.)
[ЖЦЧШ] К А > -КА,ЕК # девочка > девочек (мн,р.п.)
Й К А > -ЙКА,ЕК # майка > маек (мн,р.п.)
Ь К А > -ЬКА,ЕК # долька > долек (мн,р.п.)
А > М # стена > стенам (мн,д.п.)
А > МИ # стена > стенами (мн,т.п.)
А > Х # стена > стенах (мн,п.п.)
#
# существительные ж.р., оканчивающиеся на -я
#
Я > -Я,И # земля > земли (р.п.)
[^И] Я > -Я,Е # земля > земле (д.п.)
Я > -Я,Ю # земля > землю (в.п.)
Я > -Я,ЕЙ # земля > землей (т.п.)
# устаревшая форма
Я > -Я,ЕЮ # земля > землею (т.п.)
[ЕИУ] Я > -Я,Й # армия > армий (мн,р.п.)
[^АЕЗИЙОУЫЬЯ] Н Я > -НЯ,ЕН # вишня > вишен (мн,р.п.)
[АЕИОУЫЯ] Н Я > -Я,Ь # дыня > дынь (мн,р.п.)
Й Н Я > -ЙНЯ,ЕН # бойня > боен (мн,р.п.)
Ь Н Я > -ЬНЯ,ЕН # спальня > спален (мн,р.п.)
# р.п. мн.ч. слов на -ья нестандартен
Я > М # земля > землям (мн,д.п.)
Я > МИ # земля > землями (мн,т.п.)
Я > Х # земля > землях (мн,п.п.)
Необходимо его обработать, выбросив коментарии и некоторые лишние блоки.
Я произвожу считывание файла в массив и затем построчно его анализирую, используя следующий код.
Все бы ничего, и все работает, но в результате обработки НЕ ВСЕ строки отображаются корректно, а часть из них удааляется. Если строку
заменить на
, то выводятся все строки, но мне собственно и нужно взять только $1, а остальное отрезать.
Подскажите в чем м.б. загвоздка. Я не могу понять почему часть строк удаляется. И почему именно некоторые строки, а не все.
Имеется файл состоящий из блоков подобной структуры:
flag *I:
#
# Первое склонение: существительные ж.р., оканчивающиеся на -а
#
[^ГЖКХЧШЩ] А > -А,Ы # стена > стены (р.п.)
[ГЖКХЧШЩ] А > -А,И # киска > киски (р.п.)
А > -А,Е # стена > стене (д.п.)
А > -А,У # стена > стену (в.п.)
[^ЖЦЧШЩ] А > -А,ОЙ # стена > стеной (т.п.)
# устаревшая форма
[^ЖЦЧШЩ] А > -А,ОЮ # стена > стеною (т.п.)
# окончание в т.п. слов на [жцчшщ]а зависит от ударения, но преимущественно так:
[ЦЧШЩ] А > -А,ЕЙ # куча > кучей (т.п.)
# устаревшая форма
[ЦЧШЩ] А > -А,ЕЮ # куча > кучею (т.п.)
[^К] А > -А,- # стена > стен (мн,р.п.)
[^АЕЖИЙОУЦЧШЬЫЮЯ] К А > -КА,ОК # киска > кисок (мн,р.п.)
[АЕИОУЫЮЯ] К А > -КА,К # гадюка > гадюк (мн.,р.п.)
[ЖЦЧШ] К А > -КА,ЕК # девочка > девочек (мн,р.п.)
Й К А > -ЙКА,ЕК # майка > маек (мн,р.п.)
Ь К А > -ЬКА,ЕК # долька > долек (мн,р.п.)
А > М # стена > стенам (мн,д.п.)
А > МИ # стена > стенами (мн,т.п.)
А > Х # стена > стенах (мн,п.п.)
#
# существительные ж.р., оканчивающиеся на -я
#
Я > -Я,И # земля > земли (р.п.)
[^И] Я > -Я,Е # земля > земле (д.п.)
Я > -Я,Ю # земля > землю (в.п.)
Я > -Я,ЕЙ # земля > землей (т.п.)
# устаревшая форма
Я > -Я,ЕЮ # земля > землею (т.п.)
[ЕИУ] Я > -Я,Й # армия > армий (мн,р.п.)
[^АЕЗИЙОУЫЬЯ] Н Я > -НЯ,ЕН # вишня > вишен (мн,р.п.)
[АЕИОУЫЯ] Н Я > -Я,Ь # дыня > дынь (мн,р.п.)
Й Н Я > -ЙНЯ,ЕН # бойня > боен (мн,р.п.)
Ь Н Я > -ЬНЯ,ЕН # спальня > спален (мн,р.п.)
# р.п. мн.ч. слов на -ья нестандартен
Я > М # земля > землям (мн,д.п.)
Я > МИ # земля > землями (мн,т.п.)
Я > Х # земля > землях (мн,п.п.)
Необходимо его обработать, выбросив коментарии и некоторые лишние блоки.
Я произвожу считывание файла в массив и затем построчно его анализирую, используя следующий код.
PHP:
$pattern[0] = "/^((altstringchar)|(nroffchars)|(texchars)|(defstringtype)|(boundarychars)|(wordchars)|(stringchar)|(altstringtype)).*$/im";
$pattern[1] = "/^\#(.|\s)*$/im";
$pattern[2] = "/^(.+)\#(.*$)/im";
$replacement[0] = '';
$replacement[1] = '';
$replacement[2] = '$1';
foreach ($affArr as &$dict_word) {
//echo '<br>###'.'$1'.'###<br>';
$dict_word = preg_replace($pattern, $replacement, trim($dict_word));
}
PHP:
$replacement[2] = '$1';
PHP:
$replacement[2] = '$1$2';
Подскажите в чем м.б. загвоздка. Я не могу понять почему часть строк удаляется. И почему именно некоторые строки, а не все.