Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: "Anti" REGEXP или сравнение 2-х регулярных выражений [2]
Форумы портала PHP.SU » PHP » Регулярные выражения » "Anti" REGEXP или сравнение 2-х регулярных выражений

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

16. valenok - 28 Июня, 2007 - 11:59:46 - перейти к сообщению
вывод один, механизмы поиска в обоих случаях должны быть разные.
Для поиска в полне подойду регулярки, а для второго придётся использовать чтото другое.

Для того чтобы подстроки не совпадали и используются символы ^$ начала и конца строки
Тоесть обработчик должен искать с ними, а поисковик без, или как я писал припомощи LIKE %s0%
Тогда поисковик будет находить и s0 и s2 (где s0 подстрока в s2)
а обработчик не будет, так как ^s0$ будут этого н допускать
17. EuGen - 28 Июня, 2007 - 12:46:00 - перейти к сообщению
Цитата:
Для поиска в полне подойду регулярки, а для второго придётся использовать чтото другое.

Наверное, это "что то" и предстоит построить.
Я правильно понял, Вы предлагаете поисковику делать так: REGEXP не по T.REG а по f(T.REG), где f - возвращает T.REG с отрезанными ^ и $ (если таковые имеются на концах),
А обработчику - по оригинальному значению T.REG ... ?
18. valenok - 28 Июня, 2007 - 14:37:13 - перейти к сообщению
в принципе да.
Но лучше наоборот.
тоесть T.REG в оригинале будет без этих двух символов (^$)
19. EuGen - 28 Июня, 2007 - 14:58:16 - перейти к сообщению
Да я тоже так думал, но оказалось, что нельзя изменять уже существующие шаблоны.
Да и, если честно, я не очень понял как это поможет по вводу скажем st показывать поисковиком пресловутое выражение для "стан" ...
20. valenok - 29 Июня, 2007 - 10:31:03 - перейти к сообщению
Слаба богу. Можете меня поздравить. Наконец то я понял что к чему.
--
тут выходит только один вариант.
Писать эту функцию создания регулярок из слов
Тогда получится вот так:


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.  


Предварительно нужно наверное убедится что там не окажется всяких запятых, и прочих лишних символов.
21. EuGen - 29 Июня, 2007 - 10:44:26 - перейти к сообщению
Цитата:
Слаба богу. Можете меня поздравить. Наконец то я понял что к чему.

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

Ну если у вас такие сложные регулярки, то либо настолько ломать голову и сделать так чтоб скрипт и такие регулярки создавал,
либо менять структуру таблицы.\n\n(Добавление)
либо, конечно, использовать человеческие ресурсы.
23. EuGen - 29 Июня, 2007 - 10:54:26 - перейти к сообщению
Да, структуры регулярок там сложные довольно встречаются.. ну, спасибо за помощь как бы там ни было (* ..
Возможно, и удастся как то решать эту задачу, но как я уже говорил, это все равно что сравнивать два регулярных выражения ..
Цитата:
(Добавление)
либо, конечно, использовать человеческие ресурсы.

А что тут можно еще придумать?
24. valenok - 29 Июня, 2007 - 10:55:45 - перейти к сообщению
остаётся думать в какую стенку биться головой\n\n(Добавление)
можно поменять структуру БД.
Но то ли она не ваша, то ли вы просто не имеет прав на её изменение.
Хотя оказалось бы это очень полезным
25. EuGen - 29 Июня, 2007 - 11:03:12 - перейти к сообщению
Нет, на базу то у меня права рута, и она полностью наша ... просто если перерабатывать ее структуру, нужно будет очень много чего переписывать да и есть риск что будет работать не так как раньше, чего допускать нельзя, так как тогда многе пользователи могут свои прибыли потерять.
Но если изменения такие, что не сильно все перекроят, то рад выслушать, заранее спасибо!

 

Powered by ExBB FM 1.0 RC1