Вытащить фамилии

Статус
В этой теме нельзя размещать новые ответы.
такой синтаксис используется только внутри регулрного выражения, в частности в функции preg_replace, когда вам необходимо исходный текст заменить лишь частью, соотвествующей маске регулярного выражения, примеры можно найти в мануале к функции preg_replace.
для вашего случая, все необходимые результаты будут хранится в массиве $regs[1]
 
Заменил строчку
if (ereg("([А-Я][а-я]+)", $order, $regs))
на
if (preg_match_all("([А-Я][а-я]+)", $order, $regs, PREG_SET_ORDER))
и все заработало. Спасибо. И последний момент. В руководстве для по регуляркам для начинающих:
Внутри функции, которая будет выполнять операцию со строкой при помощи вышеприведенного условия, совпадение будет запоминаться в специальных переменных, в PHP к ней можно обращаться через \1 в Perl - $1. В одном условии поиска может быть несколько инструкций запоминания: ([a-z]{5})([1-8]{4}) - проверит строку на совпадение с условием, в случае удачного совпадения, запомнит пять букв в \1 ($1), четыре цифры в \2 ($2). Если обратиться к переменной \0, то окажется, что в ней хранится вся совпавшая строка, которая была описана условием.
как обращаться к этой переменной(?) \1 (меня интересует сам синтаксис). В книгах по рег.выражениям и пхп не нашел. Пробовал обращаться к ней по-разному - и как к переменной и как к массиву. не получается. спасибо

В случае с Perl так и обратится, локализованные переменные $1, $2 и т.д.
В случае PHP переменных нет, ты передаешь в preg_macth(_all)? массив, структура которого зависит от функции и флагов. Но всегда скобкам будут соответствовать элементы массива с индексами, соответствующими номеру скобок.

Код:
Если обратиться к переменной \0, то окажется, что в ней хранится вся совпавшая строка, которая была описана условием.
Здесь ошибка, верно в случае PHP, но не Perl.
И вообще строго говоря \\[0-9] не переменная, а обратная ссылка.
 
Да, вообще тяжело до меня этот Perl доходит :(
 
$fp=fopen("fam.txt", "r"); //из этого файла читаем $name = fopen("name.txt", "w"); //сюда пишем результат
while (!feof($fp)) //до конца файла fam.txt { $order = fgets($fp, 500); //считываем одну строку

if (ereg("([А-Я][а-я]+)", $order, $regs)) //Результат, соответствующий регулярке сохраняется в массиве $regs

{
$temp = $regs[0]."\r\n"; //Добавляем к каждому элементу перевод каретки на новую строку
fputs($name, $temp); //Результат пишем в name.txt
}

}
fclose($fp); fclose($name);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху