Rewrite rule (duża litera bez odstępu)

Odpowiedz Nowy wątek
2011-07-16 08:45
gregio4
0

Witam,
Potrzebuje pomocy w poprawnym sformułowaniu wyrażeń regularnych do Rewrite Rule.

Mam coś takiego:

RewriteRule ^/([a-z]+)([^A-Z][a-z0-9]+).php$ /dir/$1/$2.php

Chciałbym aby po wpisaniu ścieżki np:

adres.com/stronaPierwsza.php 

następowało przekierowanie do /dir/strona/Pierwsza.php

Proszę o pomoc.

Pozostało 580 znaków

2011-07-16 09:21
0

[^A-Z] oznacza negację, więc raczej chciałeś napisać [A-Z]


Piszę programy w językach: C, C++, Java, Python, Bash, PHP, SQL.
Przyjmuję zlecenia

Pozostało 580 znaków

2011-07-16 09:40
gregio4
0

Chciałbym aby pierwsza litera drugiej zmiennej była wielką literą. Reguła jest niepoprawna, myślałem że ^ to pierwszy znak. ;/

Pozostało 580 znaków

2011-07-16 09:50
gregio4
0

Tak zadziałało:

RewriteRule ^/([a-z]+)([A-Z].[a-z0-9]+).php$ /...

kropka jest zbędna lub wręcz niepoprawna (nie o to Ci chodziło). - AklimX 2011-07-17 21:01

Pozostało 580 znaków

2011-07-17 10:32
bswierczynski
0

I prawie miałeś rację z tym, że ^ to pierwszy znak, choć niezupełnie.

Jeśli ^ znajdzie się na początku definicji zakresu znaków, czyli na początku treści nawiasów kwadratowych [], to ^ oznacza negację tego zakresu. Czyli jeśli normalny zakres [A-Z] oznacza litery od A do Z, to zakres z negacją: [^A-Z] oznacza "dowolne znaki, które NIE są literami od A do Z`.

Jeśli ^ jest użyte w innym miejscu, to oznacza prawie to, co myślałeś, czyli jakby "pierwszy znak".

Ale niezupełnie. Tak naprawdę oznacza nie znak, tylko pozycję przed pierwszym znakiem. Jeśli chcesz dopasować ciągi, które zaczynają się od litery A, po czym następuje jedna lub więcej cyfr, możesz użyć takiego wzorca: ^A[0-9]+ (lub krócej: ^A\d+). Fakt, że ^ nie dopasowuje tak naprawdę pierwszej litery, tylko pozycję przed pierwszą literą, ma spore znaczenie. Zauważ, że jeśli dopasowywana byłaby litera, to ciąg A123 nie pasowałby do poprzedniego wzorca, mimo że powinien. Bo daszek zostałby dopasowany do pierwszego znaku, czyli litery A, a następnie w wyrażeniu regularnym mamy po prostu A, które byłoby dopasowane do kolejnego znaku: kolejnym znakiem jest jednak cyfra 1. "A" z wyrażenia nie pasuje do "1" z ciągu i wyrażenie nie działa.

Dobrze więc, że tak nie jest i że ^ dopasowuje tylko pozycję przed pierwszym znakiem, a nie sam pierwszy znak. ^ nie zżera nam znaku. Sam fakt, że sprawdzając jakiś ciąg znajdujemy się na jego początku satysfakcjonuje ^ i do pierwszego znaku dopasowywany jest kolejny element naszego wyrażenia. W naszym przykładzie, "A" z wyrażenia dopasowywane jest do pierwszego znaku, którym jest "A" -- więc pasuje! -- a do kolejnego fragmentu wyrażenia, czyli [0-9]+ dopasowywane są kolejne znaki, czyli "123". I znowu: wszystko pasuje, ciąg dopasowany.

ale Ty potrafisz niesamowicie lać wodę - unikalna_nazwa 2011-07-18 20:45

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0