[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прошу помочь с регуляркой
Sergen
Доброго времени суток!
Набросал регулярку

$url= 'sections-category/page-122.html';
preg_match ('#(^[^/?\#\.\!]+[a-z0-9/_-]+/)(page-[0-9]+\.html)#', $url, $res );
{
echo $res[1].' <br />';
}

Возникло 3 вопроса:
1) Почему при добавлении в [^/?\#\.\!] обратного слэша \\
получается false?
2) Как сделать проверку, чтобы буквы были в нижнем регистре? Надо как-то с помощью [[:lower:]]?
3) Есть ли в этом случае более быстрая альтернатива preg_match?



Спустя 4 минуты, 13 секунд (11.06.2012 - 11:04) Sergen написал(а):
Блин с первым вопросом кажется разобрался user posted image
Кажись обратный слэш просто экранирует скобку ]

Спустя 9 минут, 59 секунд (11.06.2012 - 11:14) GET написал(а):
#ui - независимо от регистра (u-UTF-8)

Спустя 1 час, 6 минут, 26 секунд (11.06.2012 - 12:21) Sergen написал(а):
Цитата (A.B.C. @ 11.06.2012 - 08:14)
#ui - независимо от регистра (u-UTF-8)

Дык, мне нужно именно в нижнем регистре.
Просто #u или #ui почему-то большие буквы все равно проходят

Спустя 17 минут, 38 секунд (11.06.2012 - 12:38) Winston написал(а):
$url= 'sections-category/page-122.html'; 
preg_match('#(^[^/?\#\.!A-Z]+[a-z\d/_-]+/)(page-\d+\.html)#', $url, $res );
{
echo $res[1].' <br />';
}

?
А так не подходит?
preg_match('#^([a-z\d/_-]+/)(page-\d+\.html)#', $url, $res ); 

Спустя 29 минут, 9 секунд (11.06.2012 - 13:07) Sergen написал(а):
Цитата (Winston @ 11.06.2012 - 09:38)
$url= 'sections-category/page-122.html'; 
preg_match('#(^[^/?\#\.!A-Z]+[a-z\d/_-]+/)(page-\d+\.html)#', $url, $res );
{
      echo $res[1].' <br />'; 
}


Да уж...так просто!
Спасибо!
Единственное не могу понять. Если убрать ту часть, где "исключить" регистр учитывается. После добавления [^/?\#\.\!\\\+\*] почему-то НЕ учитывается. В чем фокус?

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

Спустя 2 часа, 24 минуты, 53 секунды (11.06.2012 - 15:32) Winston написал(а):
Цитата (Sergen @ 11.06.2012 - 13:07)
Если убрать ту часть, где "исключить" регистр учитывается

Расскажи, что значит эта запись?
Цитата (Sergen @ 11.06.2012 - 13:07)
[^/?\#\.\!\\\+\*]

Если ответишь, то и поймешь
Цитата (Sergen @ 11.06.2012 - 13:07)
В чем фокус

Спустя 17 минут, 1 секунда (11.06.2012 - 15:49) Sergen написал(а):
Цитата (Winston @ 11.06.2012 - 12:32)
Цитата (Sergen @ 11.06.2012 - 13:07)
Если убрать ту часть, где "исключить" регистр учитывается

Расскажи, что значит эта запись?
Цитата (Sergen @ 11.06.2012 - 13:07)
[^/?\#\.\!\\\+\*]

Если ответишь, то и поймешь
Цитата (Sergen @ 11.06.2012 - 13:07)
В чем фокус

[^/?\#\.\!\\\+\*]-означает что этих символов не должно быть.
А какое отношение это имеет к регистру?

Спустя 5 минут (11.06.2012 - 15:54) Winston написал(а):
Цитата (Sergen @ 11.06.2012 - 15:49)
означает что этих символов не должно быть

Правильно. Но вижу ты так и не понял smile.gif
Цитата (Sergen @ 11.06.2012 - 15:49)
А какое отношение это имеет к регистру?

[^/?\#\.\!\\\+\*] - означает, что может использоваться любой символ, кроме тех, что указан в скобках.

Спустя 23 минуты, 25 секунд (11.06.2012 - 16:18) Sergen написал(а):
Цитата (Winston @ 11.06.2012 - 12:54)

[^/?\#\.\!\\\+\*] - означает, что может использоваться любой символ, кроме тех, что указан в скобках.

Ну? Так A-Z же не написан? Не написан. Каким образом [^/?\#\.\!\\\+\*] влияет на другие скобки: [a-z0-9/_-] ?
Вспомнилась фраза из мультика" следствие ведут колобки"
Ни че не понимаю wink.gif

Спустя 6 минут, 37 секунд (11.06.2012 - 16:24) Winston написал(а):
A-Z нету в списке исключений, потому может использоваться, хоть A-Z хоть a-z

Спустя 28 минут, 13 секунд (11.06.2012 - 16:53) Sergen написал(а):
Цитата (Winston @ 11.06.2012 - 13:24)
A-Z нету в списке исключений, потому может использоваться, хоть A-Z хоть a-z

Блин....Спасибо!
Winston, да я по поводу preg_match :rolleyes:

$link = 'sections-category/page=12';

preg_match('#page=[0-9]+$#',$link, $re);

echo substr($re[0], 5);

Нужно выцыганить последние цифры.
Какой-то мудреный код получился...Может проще есть?

Спустя 6 минут, 14 секунд (11.06.2012 - 16:59) Winston написал(а):
preg_match('#(\d+)$#',$link, $re);
print_r($re);

Спустя 12 минут, 44 секунды (11.06.2012 - 17:12) Sergen написал(а):
Цитата (Winston @ 11.06.2012 - 13:59)

Ну да.... ))))
Все хорош, пойду за весь день поем. а то с этим пхп с катушек съедешь)))
спасибо большое Winston

Спустя 17 часов, 26 минут, 58 секунд (12.06.2012 - 10:39) Sergen написал(а):
Блин, продолжение истории...
Сейчас появилась другая задача.
Подскажите пожалуйста, а как исключить подшаблон (page-\d+|\.html$)?
В смысле чтобы
$url= 'sections-articles/page-2.html';
Не проходила. Пробовал через ?! но чего-то не получается

if(preg_match('#^[^<>\\\.\|\(\)\[\]\{\}\?\*\+\ˆ\/\# \!A-Z]+[a-z\d/_-]+(?!page-)#', $url, $res ) )
{

print_r($res);

}

Спустя 26 минут, 1 секунда (12.06.2012 - 11:05) Winston написал(а):
Так?
$url= 'sections-articles/page-122.html'; 
if(preg_match('#^sections-articles/page-\d+.html$#', $url, $res ))
echo 'Не пройдешь!';

Или так
if(!preg_match('#^sections-articles/page-\d+.html$#', $url, $res ))
echo 'Проходи!';

Спустя 1 час, 51 минута, 10 секунд (12.06.2012 - 12:56) Sergen написал(а):
Цитата (Winston @ 12.06.2012 - 08:05)
Так?
$url= 'sections-articles/page-122.html'; 
if(preg_match('#^sections-articles/page-\d+.html$#', $url, $res ))
echo 'Не пройдешь!';

Или так
if(!preg_match('#^sections-articles/page-\d+.html$#', $url, $res ))
echo 'Проходи!';

Не то Winston.
Мне нужно чтобы НЕ проходило
sections-articles/page-56.html
Но при этом проходило
sections-articles.html или sections-articles/
Причем sections-articles может быть любой и так же проходило проверку на регистр, отсутствие всяких нехороших символов(Вы мне вчера помогали с этим)

Нашел вот это:
foo(?!bar) совпадает с любым появлением foo, после которого нет bar

Пытаюсь прикрутить...

Спустя 2 часа, 12 минут, 1 секунда (12.06.2012 - 15:08) Sergen написал(а):
Кажется додумался... :)

if(preg_match('#^[^<>\\\|\(\)\[\]\{\}\?\*\+\ˆ\/\# \!A-Z]+[a-z\d/_-]+[\.html]?(?!page-\d+|\.html)$#', $url, $res ))


Т.е. sections-articles/page-56.html не проходит
все остальные sections-articles/ или sections-articles.html проходят
Но печенкой чувствую что как-то не совершенно у меня получилось :rolleyes:
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.