Как преобразовать PCRE в POSIX

программирование php unix регулярные выражения pcre

Помогите преобразовать регулярные выражения в POSIX.

RewriteRule ^(?:([-a-zA-Z]+)[/]?)?(?:cid([0-9]+)[/]?)?$ /index.php?city=$1&cid=$2 [L,QSA]
RewriteRule ^(?:([-a-zA-Z]+)[/]?)?(?:id([0-9]+)[/]?)?$ /index.php?city=$1&id=$2 [L,QSA]
RewriteRule ^(?:([-a-zA-Z]+)[/]?)?(?:([-a-zA-Z]+)[/]?)?$ /index.php?city=$1&p=$2 [L,QSA]
RewriteRule ^(?:([-a-zA-Z]+)[/]?)?(?:add([0-9]+)[/]?)?$ /index.php?city=$1&p=add&cid=$2 [L,QSA]

Примечание:
ошибка [code] .htaccess: RewriteRule: cannot compile regular expression '^(/?:([-a-zA-Z]+)[/]?)?(?:cid([0-9]+)[/]/?)/?$'\n[/code]

Я понял что дело в версии apache 1.3 на 2 все работает, но нет возможности перейти на более новый Apach.

Как исправить это регулярное выражение что бы оно работало в apach 1.3
[code]RewriteRule ^(?:([-a-zA-Z]+)[/]?)?(?:cid([0-9]+)[/]?)?$ /index.php?city=$1&cid=$2 [L,QSA][/code]

уже часа 2 бьюсь нечего не выходит

Примечание:
idler (Max Antonov)
Необходимо составить следующие условия:
если /city/cid00/ то /index.php?city=city&cid=00
если /city/id00/ то /index.php?city=city&id=00
если /city/xxx/ то /index.php?city=city&p=xxx
если /city/add00/ то /index.php?city=city&p=add&cid=00
В других случаях страница 404
Ответы:
Видимо никак. В posix выражениях нет таких возможностей. а конкретно (?:
Не обязательно все правила совать в одну регулярку. Пишите по-проще:
RewriteRule ^city/cid(\d+)/ $ /index.php?city=city&cid=$1 [L,QSA]
RewriteRule ^city/id(\d+)/ $ /index.php?city=city&id=$1 [L,QSA]
RewriteRule ^city/([^/]+)/ $ /index.php?city=city&p=$1 [L,QSA]
RewriteRule ^city/add(\d+)/ $ /index.php?city=city&p=add&cid=$1 [L,QSA]


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.