регулярные выражения

Ginger

Guest
регулярные выражения

Помогите, пожалуйста, составить рег. выражение:
Вот пример кода, который не работает:
Код:
$text = "some text with image <img src=”../user_img/093470394746/image.gif”> 
goes here for testing purposes";
preg_match('/user_img\/ ? ([0-9]{12})\/ ',$text,$result);

foreach( $result as $v)
echo "res - ".$v;
суть заключается в том, что нужно в данном тексте найти название директории, состоящие исключительно из цифр, и которое _всегда_ находиться после «user_img/».
Вернуть его в переменную.
Количество цифр всегда 12. Читать нужно либо 12 цифр подряд, либо до forward slash «/».
 

SelenIT

IT-лунатик :)
Ginger
1) Где закрывающий ограничитель? Для наглядности лучше используй в качестве ограничителя символы, которых нет в строке.
2) Пробелы значимы.
3) Зачем в твоем паттерне знак вопроса?
 

Ginger

Guest
Originally posted by SelenIT
Ginger
1) Где закрывающий ограничитель? Для наглядности лучше используй в качестве ограничителя символы, которых нет в строке.
2) Пробелы значимы.
3) Зачем в твоем паттерне знак вопроса?
vsio delo v tom chto ja vobshe malo ponimaju chto tam napisano.
pose togo kak 10 raz man prochitala, smogla napisat tolko to chto pokazala.

esli ne slozhno, privedi gotovyj kod s objasnenijami. mne legche na primerax, sut' kotoryx ja sama ponimaju.
 

Erise

Guest
PHP:
$text = 'some text with image <img src="../user_img/093470394746/image.gif"> goes here for testing purposes';

preg_match ("/user_img\/[0-9]{12}/", $text, $matches)
 

Ginger

Guest
Originally posted by Erise
PHP:
$text = 'some text with image <img src="../user_img/093470394746/image.gif"> goes here for testing purposes';

preg_match ("/user_img\/[0-9]{12}/", $text, $matches)
i vsio?? =D

mlin, znachit ja ne tak uzh i nepravilno napisala. =)))

spasibo
 

SelenIT

IT-лунатик :)
найти название директории, состоящие исключительно из цифр, и которое _всегда_ находиться после «user_img/».
Вернуть его в переменную.
Количество цифр всегда 12. Читать нужно либо 12 цифр подряд, либо до forward slash «/».
PHP:
preg_match ("!(?<=user_img/)([0-9]{12}|[0-9]+(?=/))!", $text, $matches);
/*
!           - ограничитель, которого нет в строке,
              чтоб не заморачиваться с экранированием
(?<=user_img/) - проверяет, что перед искомой строкой идет
              "user_img/", но не включает эту строку в результат
              (lookbehind assertion)
(           - начало подшаблона, совпадение с которым будет
              возвращено
[0-9]{12}   - строго 12 цифр подряд,
              можно записать короче как \d{12}
|           - или же (альтернатива)
[0-9]+      - несколько цифр подряд (минимум одна),
(?=/)       - за которыми обязательно идет прямой слеш,
              причем этот слеш не включается в рез-т
              (lookahead assertion)
)           - конец подшаблона
!           - закрывающий ограничитель
*/
большое спасибо Profic за обнаруженные баги :) - уже исправил
 

Profic

just Profic (PHP5 BetaTeam)
SelenIT
маленькие правки :)
1) loohahead - вперед смотрящий :) lookbehind, соответственно, наоборот
2) твои assertion-ы будут применяться к соответствующией части альтренативы, а не ко всей регулярке
3) [0-9] с легкостью заменяется на \d
 

SelenIT

IT-лунатик :)
Profic, спасибо за замечания! И вот ведь обидно, тестировал я со скобками, а при постинге увлекся расстановкой пробелов, затупил и скобки убрал... эх, стандартное оправдание - конец рабочего дня...
 

Ginger

Guest
Chiut drugoe vyrazhenie

$searches = array("[\']", "'class=[^\s|>]'si");
$replaces = array("`" , "");

vopros kasaetsia reguliarnogo vyrazhenija - 'class=[^\s|>]'si

delo v tom chto ja xochu udaliat iz html koda vse class'y (i style tozhe, no eto potom po primeru mozhno sdelat)

pri etom ja xochu chto by probel pered class= udalialsia, a posle ego ostavalsia esli est
<p class="bla" align=right>

kod kotoryj napisala ja udaliaet slovo class= esli imia klassa ukazano v kavychkax - class="bla", ostajotsia "bla"
i udaliaet class= i pervuju bukvu posle, esli class bez kovychek -
class=bla, ostajotsia la

ja xochu chtob skript iskal slovo class= i udalial ego vmeste s tom chto idiot posle = do probela ILI zakryvajushego >
(ved mozhet byt <p class=bla> )

podskazhite gde eto popravit?
ja uzhe chto tolko ne isprobovala.. to on uimenia ves tekst udaliat, to nichego, to tolko class= ... =((
 
Сверху