Проверка URL-адреса с регулярным выражением

#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 нет полной остановки, поэтому в этом случае он не будет поднят.