ох уж эти "регулярные выражения"

iceman

говнокодер
ох уж эти "регулярные выражения"

как поступить...

например мне надо отыскать в тексте {[\w\.\*\%]+}
как лудше поступать?
1) сначало отыскать в большом тексте {(\S+)} и передать найденное другой функции, которая бдет обрабатывать этот текст... приэтом я использую параметр \e
2) либо задать много паттернов в массиве, и передать регулярному выражению - пусть ищет по 10 раз в большом тексте...

как посоветуйте? я лично за 1вый способ, но возможно я ошибаюсь...

-~{}~ 29.03.07 14:23:

вопрос #2

чето не могу вкурить...

надо заменить в тексте все слова на $слово
т.е. (\w+)

"по бокам" слова может быть "пробельный символ (\s)
либо нечего (никакой другой символ, т.е. это может быть началом строки, либо концом)

-~{}~ 29.03.07 14:25:

т.е. проблема: *слово... заменит на *$слово, а надо чтобы пропускал...

-~{}~ 29.03.07 14:29:

Ответ нужен на вопрос #2 (чето он не дает удалить первый вопрос)
 

DiMA

php.spb.ru
Команда форума
> а надо чтобы пропускал

[^a-z]([a-z])


И полезно знать:

\w - это произвольная цифра, буква или символ подчеркивания

внутри [...] выкидывай слеш у * . и т.д.
 

iceman

говнокодер
DiMA

мне и надо \w

[^a-z]([a-z])

%?;слово - первые 3 символа - будут - удалятся, а мне надо чтобы воопще он ее не заменял... либо пробельный символ по бокам либо начало строки...

Dovg
\b нашел...

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

Dovg

Продвинутый новичок
если я тебя правильно понял, то
\b(слово)\b
 

DiMA

php.spb.ru
Команда форума
слушай, шевели мозгами, когда подсказывают...

$text=" ".$text;
1. $text=preg_replace("!(\s)(\w+)!is","\\1\$\\2", $text);
2. $text=preg_replace("!([^w])(\w+)!is","\\1\$\\2", $text);

1 и 2 - смотря че именно ты хочешь, я не в курсе

-~{}~ 29.03.07 15:15:

> \b(слово)\b

не заменит второе слово
тогда уж так:

!\b(слово)(?=\b)!
 

iceman

говнокодер
PHP:
        $regs = array('#  \.(\w+)    #xs',
                      '# \.%(\w+)    #xs',
                      '#    (\w+)    #xs',
                      '#  \*(\w+)    #xs');
        
        $repls = array('[\'$1\']',
                       '[$$1]',
                       '$$1',
                       '$1');
        
        $parsed = preg_replace($regs, $repls, strtoupper($parsed));
мне нужно пропарсировать все переменные, "слова" превратить в переменные PHP ($)
а *слово в Константы...

\b я так понял - не символ, а позиция ...
DiMA
разбираюсь с твоим примером
 

DiMA

php.spb.ru
Команда форума
> \b я так понял - не символ, а позиция ...

точно, полезно читать ман... в (?= ...) писать \b не нужно - это бред :)
туда как раз можно (?=[^w]) или (?=\s), но это все как делает делает \b
 

iceman

говнокодер
DiMA

не один вариант из твоих примеров должным образом не работает...

вот смари, надо так:

"слово" может находится в где то в строке (не в начале и не в конце)

тогда для ее идентификации нужен пробельный символ...(\S)
но слово может находится и вначале строки (перед ним нечего не идет!)
ладно - на конец строки можно забить... не так важно...

пример:
слово1 ;слово2 слово3 *слово4 слово5
заменится на:
$слово1 ;слово2 $слово3 слово4 $слово5
 

DiMA

php.spb.ru
Команда форума
читать умеешь, я для чего написал это? $text=" ".$text;

<?
$text=" "."слово1 ;слово2 слово3 *слово4 слово5";
echo preg_replace("!(\s)(\w+)!is","\\1\$\\2", $text);
?>

делает все по твоему примеру, тема закрыта. Как удалить лишний пробел - напрягись сам.
 

iceman

говнокодер
пардон, не заметил... теперь понятен твой прием!
СПАСИБО
 
Сверху