| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Регулярное выражение |
| Автор: Frikazoid 25.7.2004, 13:26 |
| Доброго времени суток господа! Я в данный момент пишу мини поиск для сайта! и меня интересует одино регулярное выражение! в данный момент всё работает на уровне детского сада! к примеру есть строка: "я ищу тестовую строку" я делаю массив слов, где сепаратор пробел! не подскажете как мне сделать регулярное выражение для такой вот строки: "я ищу 'тестовая строка' тест" к примеру вот это preg_match_all("/'(.*)'/Uims", $s, $res); мне найдёт только 'тестовая строка'. А мне надо чтоб он учитывал и слова вне ковычек и разные виды ковычек! Плз хЭлп! Спасибо за любую помощ! |
| Автор: Secandr 25.7.2004, 15:23 |
| А что ты от кавычек хочешь? Какая у них функция? |
| Автор: Frikazoid 25.7.2004, 16:07 |
| Ну как это какая? строку "я ищу 'тестовая строка' тест" мне надо разбить на: я ищу тестовая строка тест то что в кавычках считается как одно слово! |
| Автор: Secandr 25.7.2004, 17:04 |
| я думаю есть смысл делать так: искать все '([^']+)' и "([^"])" запоминать, а затем вырезать и искать простые слова. |
| Автор: Frikazoid 25.7.2004, 19:20 |
| Я чё та не вкуриваю! я конечно могу сделать поиск preg_match_all("/'(.*)'/Uims", $s, $res1); preg_match_all('/"(.*)"/Uims', $s, $res2); а поотом всё что осталось! но это же не круто! |
| Автор: Secandr 26.7.2004, 08:29 |
| можно ещё так: ("|')([^\\1])\\1 - так искать. |
| Автор: Frikazoid 26.7.2004, 11:07 |
| А этот рег експ вааще не сработал! извини конечно! но ты хоть тестишь когда пишешь в сюда? |
| Автор: Secandr 26.7.2004, 11:12 |
| Frikazoid нет я просто идею сказал Просто помню как обсуждалась похожая проблема и примерно так делали. Хотя можно использовать preg, отучить алгоритм от жадности и тогда просто юзать ("|')([.]*)\\1 P.S. а пример работать и не будет, попробуй вот так: ("|')([^\\1]*)\\1 |
| Автор: Frikazoid 26.7.2004, 11:32 |
| <? $s="t 'test ne test' or 'test' not "; $s=$s.'more test for "test string" not'; $q='"'; $n=preg_match_all("/(['](.*)['])|([".'"'."](.*)[".'"'."])|([^ ](.*)[$ ])/Uims", $s, $res); for($i=0; $i<=$n-1; $i++) echo $res[0][$i].'<br>'; ?> вот это работает! кроме последнего слова "not"! Почему? |
| Автор: Secandr 26.7.2004, 11:44 |
| Frikazoid Попробуй в конце пробел добавить У тебя же: [$ ] Блин долго доходило что значит: ([".'"'."](.*)[".'"'."]) , потом понял, что это: ([\"](.*)[\"]) |
| Автор: Frikazoid 26.7.2004, 12:09 |
| Secandr Попробуй в конце пробел добавить Это же не круто! по тамерзки мона сказать! Secandr У тебя же: [$ ] так я понимаю что пробел! я просто не знаю как по другому сделать! |
| Автор: Secandr 26.7.2004, 12:13 |
| Frikazoid Ну может и по ламерски, но работает Пойду дочитаю книжку по регулярным выражениям, ... вот тогда может и красиво получится |
| Автор: Frikazoid 26.7.2004, 12:42 |
| Secandr Эх! если бы у меня была такая книженция! Добавлено @ 12:47 Блин! Я не могу удалить последний пробел! ну тот что добавил для работаспособности рег експа! [$ ] не подходит, так как может быть несколько слов (при использовании ковычек)! |
| Автор: MuToGeN 26.7.2004, 12:59 |
| а не проще будет mysql-евый MATCH AGAINST пользовать? |
| Автор: Frikazoid 27.7.2004, 13:19 |
| MuToGeN нет не проще! я парсю филесы! |
| Автор: Frikazoid 27.7.2004, 20:35 |
| ну вот вроде и всё! получилось! кто хочет заценить как это всё работает прошу на http://litexplus.md/ |
| Автор: Secandr 27.7.2004, 21:13 |
| ты лучше выражение покажи |
| Автор: IZ@TOP 27.7.2004, 21:16 |
| Frikazoid Господи... похоже жто чудо на нюк... И на будущее. Заценивают не в этом форуме |
| Автор: Frikazoid 28.7.2004, 10:59 |
| Secandr я же уже писал само выражение! $nn=preg_match_all("/(['](.*)['])|([\"](.*)[\"])|([^ ](.+)[$ ])/Uims", " ".$q." ", $q); IZ@TOP ну я просил не сайт заценить а поиск! а по поводу того что на нюк смахивает...... все это говорят, но я сам делал саммммм! мож чего-то изменить? хотя.... да и потом я не десигнер! |
| Автор: IZ@TOP 28.7.2004, 13:30 |
| Frikazoid К сожалению поиск мне ни чего не показал. Просто пустую страничку. |
| Автор: Frikazoid 29.7.2004, 10:42 |
| IZ@TOP Зайди ещё раз! я просто тогда как раз капался с настройками сервака! и к тому же прошу учитывать специфику контента при поиске! |