FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Har WN som tidsfördriv
|
\b är ju smidigt i reguljära uttryck när man vill matcha hela ord (t ex: /\bord\b/). Tyvärr funkar det inte alltid så bra med annat än engelska ord (\w) bestående av [a-zA-Z0-9]. Ord som innehåller svenska tecken delas upp felaktigt, t ex "innehåller", som blir "\binneh\bå\bller". Detta ställer till det en del för mig både i PHP och JavaScript, och jag undrar om någon annan har smidiga lösningar?
Exempelkod (JavaScript eftersom det är vad jag håller på med just nu, men jag får motsvarande i PHP): Kod:
"de det de öde både ödem <b>öde</b> <b>de</b> öde".replace(/\bde\b/gi, '--') Resultat: "-- det -- ö-- bå-- ödem <b>ö--</b> <b>--</b> ö--" Önskat resultat: "-- det -- öde både ödem <b>öde</b> <b>--</b> öde" |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Bara ett inlägg till!
|
[^a-zåäöA-ZÅÄÖ0-9] kanske? Inte lika smidigt, men du kanske kan lägga det i en variabel?
|
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Om diakriter räknas som del av ord borde styras av locale-inställningarna för php tycker man.
|
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
Citat:
Enklaste lösningen är att använda lösningar med \pL och andra unicode (utf-8) klasser. Framförallt bör man avhålla sig från att använda emilvs bristfälliga lösning (tar bara med ett fåtal undantag - missar exempelvis é). |
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Har WN som tidsfördriv
|
Som kuriosa kan nämnas att i Python kan man ganska lätt få locale-inställningarna att styra över detta.
|
|||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Citat:
Bättre vore ju om det skulle fungera med \b för alla ord, alltid. Även på engelska betraktas ju ord som naïve och crème som ord även om dom har tecken som gör medelamerikanen förvirrad. Dessutom skulle väl även en amerikan betrakta ett grekiskt ord som just ett ord även fast dom inte kunde läsa det…? Dessvärre är väl detta som vanligt en rest på vägen från ascii via iso-8859 till unicode. Hursomhelst så fungerar ju \pL för alla bokstäver och det är väl lösningen. Som ytterligare kuriosa kan tilläggas att Perl, som var populärt innan det så avancerade asp och det så praktiska php, har utmärkt regexp-stöd för unicode. |
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Har WN som tidsfördriv
|
Citat:
Kod:
# python: re.L re.LOCALE Make \w, \W, \b, \B, \s and \S dependent on the current locale. |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Citat:
För javascript vore i alla fall en sådan lösning rena katastrofen - alla webbläsare skulle implementera det lite annorlunda - och vara beroende av klientens språkinställningar (vilka kan råka eller inte råka vara samma språk som språket på webbsidan)! (Vilket gör att när du surfar in på dn från webbkaféet i Peking så får du kinesiska locale-inställningar…). Nä, lösningen är förstås att använda unicode-baserade teckenklasser som redan finns i exempelvis Perl och php. Javascript är dessutom baserat på unicode så att använda en u-flagga som i php exempelvis vore långt mycket bättre. Kika lite på t.ex. \p{Separator}, \p{Letter} och \p{Greek} om du missat detta. |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Har WN som tidsfördriv
|
Ja, unicodebaserade teckenklasser är nog prima, i PHP i alla fall. Tackar för det tipset martine.
Men i JavaScript funkar väl inte \p{Separator} etc? Jag har i alla fall aldrig sett något om att JavaScript skulle stödja det. |
|||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
Citat:
Så än så länge så har du inget annat val än att själv "deklarera" klasserna (som tur är så är i alla fall JavaScript unicodebaserat så det ska inte bli något trubbel där) med hjälp av gamla hederliga [aáàäå…] eller kanske lite enklare \uXXXX-\uXXXX. |
|||
![]() |
![]() |
Svara |
|
|