#java #regex #apache #mod-rewrite
#java #регулярное выражение #apache #мод-перезапись
Вопрос:
Я застрял с простой проблемой регулярных выражений. Что я хочу сделать, так это проверить URL-адрес, чтобы увидеть, содержит ли он слово ajax, и если оно соответствует URL-адресу.
Например, указанный URL localhost/ajax/image/get должен совпадать и возвращать localhost/ajax/image/get
Однако localhost / image / get не должны совпадать.
У меня есть базовые знания о регулярных выражениях, но я не смог заставить что-либо работать для этого.
Есть предложения? Я уверен, что это довольно простой случай.
Я использую это для правила перезаписи модов
Правилом перезаписи модов является RewriteRule ^.?bajaxb.$ ajax.php?url=$1 [PT,L]
Запрошенный URL-адрес http://localhost:93/public/ajax/image /
Он перенаправляет на ajax.php файл, но значения URL-адресов не сохраняются.
У меня есть другое правило, которое является общим, следующим образом RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
Запрошенный URL-адрес http://localhost:93/public/imgage/get /
Когда это перенаправляет на index.php у него есть /public/image/get/ в url GET значение
Комментарии:
1.
/ajax/
всегда ли будет корневая папка для такого запроса?2. не всегда, если его часть URL
Ответ №1:
Простое регулярное выражение. У вас есть несколько тегов, поэтому я не совсем уверен, какова ваша платформа. Если это java :
Pattern regex = Pattern.compile("^.*?\bajax\b.*$");
В общем, это должно быть регулярное выражение :
/^.*?bajaxb.*$/
Объяснение :
"^" // Assert position at the beginning of the string
"." // Match any single character that is not a line break character
"*?" // Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
"\b" // Assert position at a word boundary
"ajax" // Match the characters “ajax” literally
"\b" // Assert position at a word boundary
"." // Match any single character that is not a line break character
"*" // Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
"$" // Assert position at the end of the string (or before the line break at the end of the string, if any)
Наконец, я бы предложил это для дальнейшего чтения.
Комментарии:
1. Привет, спасибо за помощь, это одно из регулярных выражений, которое я пробовал, я ожидал, что это сработает. Однако использование плагина netbeans для проверки регулярного выражения и URL-адреса Apache mod_rewrite для того, где я буду размещать правило, похоже, не соответствует. У меня было 4 тега, потому что у меня должно быть 4 тега, чтобы задать вопрос. Я опубликую свое правило mod_rewrite и URL-адрес, который я нажал
Ответ №2:
Я решил проблему, регулярное выражение, которое я искал, — это ^(.ajax.) $
Я пытался ^(ajax) $, но это не имеет смысла.
Спасибо за помощь
Ответ №3:
Как насчет
[a-z/]*ajax[a-z/]*
это может потребовать некоторой доработки, поэтому дайте мне знать, если его нужно улучшить.
Комментарии:
1. я не думаю, что это будет соответствовать, потому что я не думаю, что это не будет соответствовать части http: //. Я пробовал это, и это не соответствует
2. всегда ли будет часть xxxx://? если это так, попробуйте [a-z] ://[a-z._/-]*ajax[a-z._/-]*
Ответ №4:
Это должно быть так просто, как:
Pattern.matches(regex, str)
итак
Pattern.matches(«ajax», str)
где str — это передаваемая строка url.
Комментарии:
1. Привет, Пол, я использую его в переписывании мода, так как я тестировал регулярное выражение в подключаемом модуле netbeans, и мне нужно поставить 4 тега на вопрос, который я поставил java в качестве тега. Дополнительные примечания см. Выше
2. @Paul это также будет соответствовать blajaxbla
3. @failedDev нет, если вы используете «ajax».
4. @Paul Ну, в этом и суть, вы можете использовать blajax. Это соответствует, но не должно.
5. @failed dev, он изменил свой вопрос и в его первоначальном вопросе не было blaajaxbla, но после blaaajaxbla нет полной остановки, поэтому в этом случае он не будет поднят.