Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярное выражение


Автор: Frikazoid 25.7.2004, 13:26
Доброго времени суток господа!
Я в данный момент пишу мини поиск для сайта!
и меня интересует одино регулярное выражение!

в данный момент всё работает на уровне детского сада! к примеру есть строка:
"я ищу тестовую строку"

я делаю массив слов, где сепаратор пробел!

не подскажете как мне сделать регулярное выражение для такой вот строки:
"я ищу 'тестовая строка' тест"

к примеру вот это preg_match_all("/'(.*)'/Uims", $s, $res); мне найдёт только 'тестовая строка'.
А мне надо чтоб он учитывал и слова вне ковычек и разные виды ковычек!

Плз хЭлп! smile.gif
Спасибо за любую помощ!

Автор: Secandr 25.7.2004, 15:23
А что ты от кавычек хочешь?

Какая у них функция?

Автор: Frikazoid 25.7.2004, 16:07
Ну как это какая?
строку "я ищу 'тестовая строка' тест" мне надо разбить на:
я
ищу
тестовая строка
тест

то что в кавычках считается как одно слово! smile.gif

Автор: 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
А этот рег експ вааще не сработал!
извини конечно! но ты хоть тестишь когда пишешь в сюда? biggrin.gif tounge.gif

Автор: Secandr 26.7.2004, 11:12
Frikazoid
нет я просто идею сказал smile.gif А полное выражение что-то на ум не приходит sad.gif

Просто помню как обсуждалась похожая проблема и примерно так делали.
Хотя можно использовать 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
Попробуй в конце пробел добавить smile.gif

У тебя же: [$ ]

Блин долго доходило что значит: ([".'"'."](.*)[".'"'."]) , потом понял, что это: ([\"](.*)[\"]) biggrin.gif

Автор: Frikazoid 26.7.2004, 12:09
Secandr Попробуй в конце пробел добавить
Это же не круто! по тамерзки мона сказать! smile.gif

Secandr У тебя же: [$ ]
так я понимаю что пробел! я просто не знаю как по другому сделать!

Автор: Secandr 26.7.2004, 12:13
Frikazoid Ну может и по ламерски, но работает smile.gif

Пойду дочитаю книжку по регулярным выражениям, ... вот тогда может и красиво получится smile.gif

Автор: Frikazoid 26.7.2004, 12:42
Secandr Эх! если бы у меня была такая книженция! smile.gif

Добавлено @ 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
ты лучше выражение покажи smile.gif

Автор: IZ@TOP 27.7.2004, 21:16
Frikazoid
Господи... похоже жто чудо на нюк...
И на будущее. Заценивают не в этом форуме wink.gif А в готовых и разрабатываемых проектах.

Автор: Frikazoid 28.7.2004, 10:59
Secandr я же уже писал само выражение!
$nn=preg_match_all("/(['](.*)['])|([\"](.*)[\"])|([^ ](.+)[$ ])/Uims", " ".$q." ", $q);

IZ@TOP ну я просил не сайт заценить а поиск! smile.gif
а по поводу того что на нюк смахивает...... все это говорят, но я сам делал hmmm.gif sad.gif mad.gif
саммммм!
мож чего-то изменить? хотя....
да и потом я не десигнер! smile.gif я девелопер, а десигн не моя головная боль!

Автор: IZ@TOP 28.7.2004, 13:30
Frikazoid
К сожалению поиск мне ни чего не показал. Просто пустую страничку.

Автор: Frikazoid 29.7.2004, 10:42
IZ@TOP Зайди ещё раз! я просто тогда как раз капался с настройками сервака! и к тому же прошу учитывать специфику контента при поиске!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)