Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Извлечь фамилии из строки, соответствующие элементам массива
 
 автор: Ursus   (02.07.2007 в 23:40)   письмо автору
 
 

Прошу Вас мне помочь в следующей задаче:
Иметя строка поиска:

$search="Иванов Иван (1) еще Петров (2) и Сидоров (3)"; 

для каждой фамилии число уникально.
и массив:

$array[0][0]="Иванов";
$array[0][1]=1;
$array[1][0]="Сидоров";
$array[1][1]=4;
$array[2][0]="Смирнов";
$array[2][1]=2;

Необходимо извлечь из строки поиска элементы массива (желательно цифры), где фамилия с числом соответствует элементам объявленного массива.
Хотел сделать при помощи функции ereg(), но регулярное выражение не удается написать.
Подскажите, пожалуйста, как составить регулярное выражение. С зарания спасибо.

   
 
 автор: kasmanaft   (03.07.2007 в 06:30)   письмо автору
 
   для: Ursus   (02.07.2007 в 23:40)
 

"Иванов Иван (1) еще Петров (2) и Сидоров (3)" - откуда эта строка?
Почему у Петрова и Сидорова нет имен?
как можно определить что "еще" - это не имя Петрова.. ?

   
 
 автор: Ursus   (03.07.2007 в 09:19)   письмо автору
 
   для: kasmanaft   (03.07.2007 в 06:30)
 

строка дана в PHP-сценарии.
имен у Петрова с Сидоровым нет для усложнения задачи. Слово 'еще' добавленно по этой же причине. Вообще, имена выбирать не надо.
Я хотел постепенно составить регулярное. Сначала составлял выражение для поиска одной фамилии.

$pattern="Петров.*\(1\)";
ereg($pattern,$search,$ff);
print_r($ff);

но и это простое выражение, почему-то не работало.

   
 
 автор: kasmanaft   (03.07.2007 в 09:28)   письмо автору
 
   для: Ursus   (03.07.2007 в 09:19)
 

> Вообще, имена выбирать не надо.
То есть мы знаем что "Петров, Сидоров, Пупкин и тд и тп" - это фамилии ?

> но и это простое выражение, почему-то не работало.
Потому, что после "Петров" у Вас в строке нет "(1)"

ЗЫЖ я все-таки не пойму что нужно сделать... Ищем в строке фамилию, такую же ищем в массиве и выбираем из массива $array[..][1] ? (число то есть) ... А для чего нужны скобки с цифрами в строке поиска?

>> где фамилия с числом соответствует элементам объявленного массива.
Фамилия соответствует или цифра в скобках? Если цифра, то для чего вообще тогда нужна фамилия?

   
 
 автор: Ursus   (03.07.2007 в 10:03)   письмо автору
 
   для: kasmanaft   (03.07.2007 в 09:28)
 

Необходимо из элементов массива array составить регулярное выражение. Для меня не проблема составить из элементов регулярное выражение. Для меня проблема - определить как будет выглядить это регулярное выражение.

>> Вообще, имена выбирать не надо.
>То есть мы знаем что "Петров, Сидоров, Пупкин и тд и тп" - это фамилии ?
>
Известна фамилия и номер (я их записал в виде $array[$i][0] и $array[$i][1])
Я делал $pattern="Иванов.*\(1\)"; Т.е. известная нам фамилия + некоторые символы + известный номер в скобках. Повторюсь, что и это простое регулярное выражение у меня не работает. Далее хотел регулярное выражения усложнить, добавив в него еще фамилии с номерами. Но не знаю как реализовать логическое ИЛИ.

>> но и это простое выражение, почему-то не работало.
>Потому, что после "Петров" у Вас в строке нет "(1)"
>
Прошу прощения, описался. Там Иванов должен быть.
>ЗЫЖ я все-таки не пойму что нужно сделать... Ищем в строке фамилию, такую же ищем в массиве и выбираем из массива $array[..][1] ? (число то есть) ... А для чего нужны скобки с цифрами в строке поиска?
>

В строке поиска могут встретиться еще цифры без скобок.

>>> где фамилия с числом соответствует элементам объявленного массива.
>Фамилия соответствует или цифра в скобках? Если цифра, то для чего вообще тогда нужна фамилия?

Каждому элементу соответствует одна фамилия и один номер.

   
 
 автор: Ursus   (03.07.2007 в 11:16)   письмо автору
 
   для: Ursus   (03.07.2007 в 09:19)
 


$pattern="Иванов.*\(1\)";
ereg($pattern,$search,$ff);
print_r($ff);

Опа... заработало... Скажите, пожалуйста, как нужно изменить $pattern, что бы он искал еще какие-нибудь фамилии с номером. Т.е. как можно реализовать логическое "ИЛИ"?

   
 
 автор: cheops   (03.07.2007 в 09:26)   письмо автору
 
   для: Ursus   (02.07.2007 в 23:40)
 

Что-то не очень понятно... Необходимо сформировать массив или он уже имеется заранее?

   
 
 автор: Ursus   (03.07.2007 в 09:42)   письмо автору
 
   для: cheops   (03.07.2007 в 09:26)
 

Массив $array дан. В принципе, я его написал, что бы показать, что элементу соответствует фамилия и номер. Необходимо определить какие элементы входят в строку "search".Мне на данном этапе решения задачи ответ через элементы массива $array не требуется. У меня проблема в том, что я не могу составить регулярное выражение.

   
 
 автор: Ursus   (03.07.2007 в 14:01)   письмо автору
 
   для: Ursus   (02.07.2007 в 23:40)
 

Всем спасибо. Нашел решение.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования