preg_split
preg_split($pattern, $subject, $limit, $flags)
Dzieli ciąg wszędzie tam, gdzie pasuje wyrażenie regularne, i zwraca tablicę części. W odróżnieniu od explode() radzi sobie z kilkoma różnymi separatorami naraz.
Parametry
- $pattern – wyrażenie regularne dla separatora.
- $subject – dzielony ciąg.
- $limit – opcjonalny, maksymalna liczba części (−1 albo 0 = bez ograniczenia).
- $flags – opcjonalny: PREG_SPLIT_NO_EMPTY pomija puste części, PREG_SPLIT_DELIM_CAPTURE zwraca też separatory z grupy w nawiasach, PREG_SPLIT_OFFSET_CAPTURE także pozycje.
Przykłady
// tagi oddzielone przecinkiem, średnikiem albo spacją
$tags = preg_split("/[\s,;]+/", "php, mysql; css ,html", -1, PREG_SPLIT_NO_EMPTY);
echo implode("|", $tags); // php|mysql|css|html
// wiersze niezależnie od końca wiersza (Windows, Linux, stary Mac)
echo count(preg_split("/\R/", "a\r\nb\nc\rd")); // 4
// zdania ze znakami interpunkcyjnymi
$parts = preg_split("/([.!?])\s*/", "Cześć. Jak się masz? Dobrze!", -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
echo implode("|", $parts); // Cześć|.|Jak się masz|?|Dobrze|!
// tekst z polskimi literami na pojedyncze znaki
echo implode(" ", preg_split("//u", "żółw", -1, PREG_SPLIT_NO_EMPTY)); // ż ó ł w
// tylko na dwie części
echo implode("|", preg_split("/=/", "name=wartość=ze=znakami", 2)); // name|wartość=ze=znakami
Na co uważać
- Przy jednym stałym separatorze szybsza jest explode().
- Bez PREG_SPLIT_NO_EMPTY powstają puste części na początku, na końcu i między dwoma separatorami.
- Do tekstu w UTF-8 dodaj modyfikator u, inaczej przy dzieleniu na znaki tnie bajt po bajcie.
- Przy błędzie we wzorcu zwraca false. Błąd zdradzi preg_last_error().
Powiązane funkcje:
explode()
preg_match_all()
mb_str_split()
str_split()