[php] Regex, pojedyncza litera

0

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ę.

0

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

0

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ę)

0

@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
0

bswierczynski - jak pisałem, to nie złapie "abc d e f ghi" literki "e"

0
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?

0

ups, w wirze roboty pomieszało mi się \b z \s - tak tak, rzeczywiście, przychylam się do Twego rozwiązania - sensowniejsze i prostsze

0

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"

0

@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.

0
$result = preg_replace('/\W+\w\b/i', '', $subject);
0

a \D\d\D nie wystarczy??

0

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

0

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

0

nie sprawdzałem poprawności, ale może się przyda
http://4programmers.net/PHP/FAQ/Polska_data_w_PHP

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