Набросал регулярку
$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 написал(а):
Блин с первым вопросом кажется разобрался
Кажись обратный слэш просто экранирует скобку ]
Кажись обратный слэш просто экранирует скобку ]
Спустя 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'; |
Да уж...так просто!
Спасибо!
Единственное не могу понять. Если убрать ту часть, где "исключить" регистр учитывается. После добавления [^/?\#\.\!\\\+\*] почему-то НЕ учитывается. В чем фокус?
Кстати 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) | ||||||
Расскажи, что значит эта запись?
Если ответишь, то и поймешь
|
[^/?\#\.\!\\\+\*]-означает что этих символов не должно быть.
А какое отношение это имеет к регистру?
Спустя 5 минут (11.06.2012 - 15:54) Winston написал(а):
Цитата (Sergen @ 11.06.2012 - 15:49) |
означает что этих символов не должно быть |
Правильно. Но вижу ты так и не понял
Цитата (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/_-] ?
Вспомнилась фраза из мультика" следствие ведут колобки"
Ни че не понимаю
Спустя 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';
Не проходила. Пробовал через ?! но чего-то не получается
Сейчас появилась другая задача.
Подскажите пожалуйста, а как исключить подшаблон (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 )) |
Не то 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 написал(а):
Кажется додумался... :)
Т.е. sections-articles/page-56.html не проходит
все остальные sections-articles/ или sections-articles.html проходят
Но печенкой чувствую что как-то не совершенно у меня получилось :rolleyes:
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: