Cześć
Potrzebuje usunąć ze stringa każdą pojedynczą literkę, otoczoną czymkolwiek poza innymi literami.
M.in. próbowałem tak, na same białe znaki:
'/[\s[a-z]{1}\s]/'
Nie działa, podpowie ktoś mi się kończą już pomysły:/
Z góry dziękuję.
Cześć
Potrzebuje usunąć ze stringa każdą pojedynczą literkę, otoczoną czymkolwiek poza innymi literami.
M.in. próbowałem tak, na same białe znaki:
'/[\s[a-z]{1}\s]/'
Nie działa, podpowie ktoś mi się kończą już pomysły:/
Z góry dziękuję.
W zależności co masz na myśli mówiąc literka ? czy 2 to tez literka - -wydaje się że nie :)
biały - litera - biały
\s\w\s
biały znak - inny niż biały - biały
\s[^\s]\s
biały - dowolny - biały
\s.\s
no i twój przykład
/s[a-zA-Z]/s
To co napisałem pomija pojedyncze znaki na początku i na końcu ciągu
jeśli "litera" to "znak alfanumeryczny", to:
/(?<=\W)\w(?=\W)//g
jeśli litera to a..z (jak chcesz polskie znaki, to musisz ręcznie wpisać do klasy) to:
/(?<=[a-z])a-z//ig
to co podał javauser jest błędne (prosty sprawdzian: "abc d e f ghi"), gdyż ostatnie \s zjada znak i w podanym przykładzie "e" nie zostanie złapane, bo nie zacznie się od białego znaku - ten już został zjedzony przez poprzednią iterację)
@Autor:
W jakim języku piszesz? Nie wszystkie języki "webowe" wspierają np. lookbehindy, których użył @Marooned. Potrzebujesz, by to działało z polskimi znakami, czy nie?
W pewnych przypadkach wystarczające może być dla Ciebie takie proste i eleganckie wyrażenie regularne:
/\b\w\b/g
bswierczynski - jak pisałem, to nie złapie "abc d e f ghi" literki "e"
Marooned napisał(a)
to nie złapie "abc d e f ghi" literki "e"
To moje? Łapie! Nie polega na białych znakach, tylko na granicach pomiędzy słowami (\b dopasowuje pozycję, a nie znak -- niczego nie zjada). Czy czegoś tu nie rozumiem?
ups, w wirze roboty pomieszało mi się \b z \s - tak tak, rzeczywiście, przychylam się do Twego rozwiązania - sensowniejsze i prostsze
Dzięki za zainteresowanie
Używam PHP, co do polskich liter, w przybliżeniu takie coś
/[\pL]*/uD - spokojnie łapie polskie znaki, mi natomiast chodzi o coś takiego:
Ja potrzebuję z:
Poniedziałek j F, Y, H:i
usunąć wszystko oprócz "Poniedziałek", zostawiając to ostatnie "i" na końcu.
Pozdrawiam
Sorry, oczywiście usuwając to "i" także, trochę zamulony jestem. Ma zostać sam "Poniedziałek". Całą sprawę komplikuje mi obecność i w słowie "Poniedziałek"
@Autor:
Dlatego też pytałem o język. W JavaScripcie już by Ci polskie litery nie działały. Jak widzisz ważne jest dodanie na początek tematu tagu czy [JS], by uniknąć nieporozumień (jest o tym mowa w regulaminie działu forum!).
Podaj więcej przykładów, ew. wyraź precyzyjniej wymagania. Z Twojego ostatniego posta wynika, że nie tyle chcesz usunąć pojedyncze litery, co zostawić pierwszy wyraz i usunąć resztę -- włącznie ze znakami przestankowymi itd. A jeśli chcesz z ciągu "Poniedziałek j F, Y, H:i" zostawić "Poniedziałek" i to jest jedyne wymaganie, to załatwi to poniższa, jakże zaawansowana, funkcja:
function zostaw_poniedzialek($inputString) {
return 'Poniedziałek';
}
;)
Także wyrażajmy nasze wymagania precyzyjnie.
$result = preg_replace('/\W+\w\b/i', '', $subject);
a \D\d\D nie wystarczy??
winerfresh - ee, coś Cię chyba zmyliło, \d to cyfra, \D to nie cyfra - dla podanego przykładu "Poniedziałek j F, Y, H:i" Twój regex nie robi nic
Dziękuję wszystkim za pomoc. Nie otagowałem tematu, ponieważ nie wziąłem pod uwagę różnic w JS.
Mam, funkcję, która na podstawie formatu daty, miała utworzyć z niego polski odpowiednik korzystając z tablic zawierające nazwy dni i miesięcy.
Wszystko się chrzaniło jeśli w formacie była np. literka i, czyli np. H:i.
Wtedy dla przykładowego Poniedziałek było Pon24edz24alek, olałem sprawę na rzecz po prostu:
public static function date_time($date_format, $time_format){}
Jak to jest KISS, co nie?:)
Pozdrawiam
nie sprawdzałem poprawności, ale może się przyda
http://4programmers.net/PHP/FAQ/Polska_data_w_PHP