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

Devona

Новичок
регулярные выражения

вот такое вот условие
грубо говоря можно разбить на под условия
/^
([A-z]+) \/*
([0-9]*|[A-z0-9_]*|[A-z]*\S[A-z]*) \/*
([0-9]*|[A-z]*) \/*
([A-z]*) \/*
([A-z]*)\/*([0-9]*)
$/


ситуация такая. если строка которая подходит к под-условиям 1 и 2 и к 5 почему-то проверка не останавливается на 1-2.
вот пример

PHP:
$url="content/about";
preg_match("/^([A-z]+)\/*([0-9]*|[A-z0-9_]*|[A-z]*\S[A-z]*)\/*([0-9]*|[A-z]*)\/*([A-z]*)\/*([A-z]*)\/*([0-9]*)$/", $url, $match);
получается массив match из 7 элементов где
$match[1]=content
$match[4]=about
а должно было бы быть
$match[1]=content
$match[2]=about

подскажите что я не так делаю.

пс. уменьшить количество под-условий невозможно. при замене квантификатора * на + preg_match напрочь перестаёт выполнятся
 

WP

^_^
:) ^ относится только к первой альтернативе, а $ только к последней. Возьми в группирующие скобки.
 

Devona

Новичок
WP
спасибо. приму во нимание
хотя проблема уже решена. у меня во втором под-условии небыло варианта просто [A-z]*

-~{}~ 27.03.07 16:41:

вопрос в догонку
слово mp3player к примеру
как его забить в условие?
[A-z0-9]* не принимает
 

Devona

Новичок
теоретически да
но в итоге получается
[2]=> string(2) "mp"
[3]=> string(1) "3"
[4]=> string(7) "players"
 

WP

^_^
А где ты подглядел A-z? Ты знаешь что означает эта запись?
> хотя проблема уже решена.
Забавно.
 

Devona

Новичок
она описана ещё в самом первом посте
идёт разбор переменной $url
PHP:
$url="content/mp3players"; 
preg_match("/^([A-z]+)\/*([0-9]*|[A-z0-9_]*|[A-z]*\S[A-z]*)\/*([0-9]*|[A-z]*)\/*([A-z]*)\/*([A-z]*)\/*([0-9]*)$/", $url, $match);
результат должен дать
PHP:
$match[1]=content;
$match[2]=mp3players;
а на практике получается
PHP:
$match[1]=content;
$match[2]=mp;
$match[3]=3;
$match[4]=players;
 

WP

^_^
Опиши как именно разобрать ты хочешь. Просто разбить в массив по / ? explode('/',$url)

-~{}~ 27.03.07 18:02:

Самое тупое в людях это неумение описывать то что они хотят.
 

Devona

Новичок
ну написано же
результат должен дать

$match[1]=content;
$match[2]=mp3players;

пример ссылки
http://localhost/catalog/mp3players/11/index.html
после разбивки его preg_mtch'ем(описана выше) в результате должен быть массив $match вот такого содержимого
[1]=> string(7) "catalog"
[2]=> string(2) "mp3players"
[3]=> string(2) "11"

а получается
[1]=> string(7) "catalog"
[2]=> string(2) "mp"
[3]=> string(1) "3"
[4]=> string(7) "players"
[5]=> string(2) "11"

к элементам этого массива далее присваиваются переменные. поэтому результат нужен именно такой как я написал.

вот и вопрос. какое условие preg_match'y надо если [A-Za-z0-9]* не подходит

WP с [A-z] я не прав. моя невнимательность. но проблема не в этом ;)
 

WP

^_^
> ну написано же
Что ты уперся и втираешь мне результаты. Ты опиши СЛОВАМИ как разбить строку ты хочешь.
олжен быть массив $match вот такого содержимого
[1]=> string(7) "catalog"
[2]=> string(2) "mp3players"
[3]=> string(2) "11"
Т.е. index.html не попадает? А почему?

-~{}~ 27.03.07 20:59:

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

Devona

Новичок
index.html обрезается ereg_replace()

и мне он не нужен. потому и обрезается
в итоге я хочу получить
[1]=> string(7) "catalog"
[2]=> string(2) "mp3players"
[3]=> string(2) "11"
что бы сделать так:
$var1=$match[1];
$var2=$match[2];
$var3=$match[3];
 

Devona

Новичок
да ладно. добавил такое условие [A-Za-z]*[0-9]*[A-Za-z_]* и стало всё как надо.
по поводу кривых регулярок. не откажусь от поправки более знающего человека если такое возможно ;)
читал мануал пхп по регуляркам, статьи на этом сайте. просьба к ним не отправлять.

-~{}~ 27.03.07 21:11:

а вот про explode не подумал.
сенкс. оказалось всё так просто.
 

WP

^_^
Devona
> а вот про explode не подумал.
Думать не надо, надо читать.


//Странный чел вообще, одно время вообще от женского рода писал.
 
Сверху