PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: Весьма сложная задача сравнения
valenok
Отправлено: 28 Июня, 2007 - 11:59:46
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




вывод один, механизмы поиска в обоих случаях должны быть разные.
Для поиска в полне подойду регулярки, а для второго придётся использовать чтото другое.

Для того чтобы подстроки не совпадали и используются символы ^$ начала и конца строки
Тоесть обработчик должен искать с ними, а поисковик без, или как я писал припомощи LIKE %s0%
Тогда поисковик будет находить и s0 и s2 (где s0 подстрока в s2)
а обработчик не будет, так как ^s0$ будут этого н допускать


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 28 Июня, 2007 - 12:46:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Цитата:
Для поиска в полне подойду регулярки, а для второго придётся использовать чтото другое.

Наверное, это "что то" и предстоит построить.
Я правильно понял, Вы предлагаете поисковику делать так: REGEXP не по T.REG а по f(T.REG), где f - возвращает T.REG с отрезанными ^ и $ (если таковые имеются на концах),
А обработчику - по оригинальному значению T.REG ... ?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok
Отправлено: 28 Июня, 2007 - 14:37:13
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




в принципе да.
Но лучше наоборот.
тоесть T.REG в оригинале будет без этих двух символов (^$)


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 28 Июня, 2007 - 14:58:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Да я тоже так думал, но оказалось, что нельзя изменять уже существующие шаблоны.
Да и, если честно, я не очень понял как это поможет по вводу скажем st показывать поисковиком пресловутое выражение для "стан" ...


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok
Отправлено: 29 Июня, 2007 - 10:31:03
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Слаба богу. Можете меня поздравить. Наконец то я понял что к чему.
--
тут выходит только один вариант.
Писать эту функцию создания регулярок из слов
Тогда получится вот так:


T.REG

id | reg
---------
1 | [c|c|S|s][t|T|T|т][a|а|А][n|н|Н]
2 | [c|c|S|s][t|T|T|т]
3 | [c|c|S|s][t|T|T|т][u|U|у|У][л|Л|l|L]
4 | [л|Л|l|L][и|И|i|I][c|c|S|s][t|T|T|т]
5 | [c|c|S|s][v|V|в|В][и|И|i|I][c|c|S|s][t|T|T|т]


поисковик по запросу строки sт должен будет создать регулярку [c|c|S|s][t|T|T|т]
и посредством следующего обратиться к базе:
SELECT `id` FROM `T` WHERE `REG` LIKE '%[c|c|S|s][t|T|T|т]%'
и будут найдены id - 1, 2, 3, 4, 5
так там везде присутствует подстрока ст

при этом есть одно НО. В базе всегда все буквы s должны соответствовать всегда одной регулярке [С|c|S|s]. тоесть если регулярка для буквы S будет не [С|с|S|s] а [С|S|c|s]
то работать не будет




скрипт проверяющий на уникальность будет проверять вот так:
SELECT `id` FROM `T` WHERE `REG` LIKE '[c|c|S|s][t|T|T|т]'


Дело осталось за самым интересным. Написать эту функцию..\n\n(Добавление)
даже не за самым интересным.
Просто пишем два массива $replacement & $pattern
в первый вводим буквы алфавита во второй регулярки на которые следует заменять буквы

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $string = strtolower($string);
  4. $pat = Array('a','b'); //...
  5. $rep = Array('[a|A|а|А]','[б|Б|b|B]'); //..
  6. $string = str_replace($pat, $rep, $string);
  7. ?>
  8.  


Предварительно нужно наверное убедится что там не окажется всяких запятых, и прочих лишних символов.


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 29 Июня, 2007 - 10:44:26
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Цитата:
Слаба богу. Можете меня поздравить. Наконец то я понял что к чему.

Видимо, настолько идиотская постановка задачи была, извиняюсь
Да, в данном конкретном случае работать будет, а что, если у меня есть скажем, регулярное выражение ^[12][0123456789]{4}$ или что то вроде ^[pр]ri[vw][eе]t |^привет |^здрав |^zdr[aа]v.... как тут быть?..
Тут уже точно не написать функцию которая может преобразовать входную строку в нужную регулярку...
P.S. "T.REG" обозначалось поле таблицы T, хранящее шаблоны-рег. выражения


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok
Отправлено: 29 Июня, 2007 - 10:49:23
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Это я понял, кажется правильно насчёт T.REG .
Я случайно написал название таблицы T.REG

Ну если у вас такие сложные регулярки, то либо настолько ломать голову и сделать так чтоб скрипт и такие регулярки создавал,
либо менять структуру таблицы.\n\n(Добавление)
либо, конечно, использовать человеческие ресурсы.


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 29 Июня, 2007 - 10:54:26
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Да, структуры регулярок там сложные довольно встречаются.. ну, спасибо за помощь как бы там ни было (* ..
Возможно, и удастся как то решать эту задачу, но как я уже говорил, это все равно что сравнивать два регулярных выражения ..
Цитата:
(Добавление)
либо, конечно, использовать человеческие ресурсы.

А что тут можно еще придумать?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok
Отправлено: 29 Июня, 2007 - 10:55:45
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




остаётся думать в какую стенку биться головой\n\n(Добавление)
можно поменять структуру БД.
Но то ли она не ваша, то ли вы просто не имеет прав на её изменение.
Хотя оказалось бы это очень полезным


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 29 Июня, 2007 - 11:03:12
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нет, на базу то у меня права рута, и она полностью наша ... просто если перерабатывать ее структуру, нужно будет очень много чего переписывать да и есть риск что будет работать не так как раньше, чего допускать нельзя, так как тогда многе пользователи могут свои прибыли потерять.
Но если изменения такие, что не сильно все перекроят, то рад выслушать, заранее спасибо!


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB