preg_split nie dzieli wielu ograniczników

Wypróbuj Nasz Instrument Do Eliminowania Problemów

The preg_split funkcja w PHP jest przydatna do dzielenia ciągów znaków na podstawie wzorca wyrażeń regularnych. Jednak jeden haczyk preg_split polega na tym, że domyślnie nie dzieli się na wiele wystąpień ogranicznika.

Na przykład, jeśli masz ciąg „witaj>> świecie” i spróbuj podzielić go na znak „>” za pomocą preg_split , możesz spodziewać się tablicy zawierającej trzy elementy: „witaj”, „”, „świat”. Lecz, preg_split zwraca tablicę zawierającą dwa elementy: „witaj”, „świat”.

Powód jest taki, że preg_split widzi wiele znaków ogranicznika obok siebie jako jedną instancję. Zatem „>>” jest traktowane jako pojedynczy ogranicznik > zamiast dwóch.

Zrozumienie PREG_SPLIT_NO_EMPTY

Zachowanie polegające na braku podziału wielu ograniczników jest częściowo spowodowane flagą PREG_SPLIT_NO_EMPTY, która jest domyślnie włączona. Ta flaga mówi preg_split aby nie zwracać pustych ciągów w tablicy wyników.

Zatem w przykładzie „witaj>>świecie”, jeśli podzielimy się na > za pomocą PREG_SPLIT_NO_EMPTY, dwa znaki > obok siebie spowodują utworzenie między nimi pustego ciągu znaków, który następnie zostanie odrzucony i nie zwrócony w końcowej tablicy.

Rozwiązania

Jeśli chcesz podzielić na wiele wystąpień ogranicznika, w tym oddzielić puste ciągi, istnieje kilka podejść:

1. Wyłącz PREG_SPLIT_NO_EMPTY

Możesz przekazać flagę PREG_SPLIT_NO_EMPTY jako trzeci parametr, aby wyłączyć to zachowanie:

|_+_|

Teraz w tablicy wyników zostaną zachowane puste ciągi znaków:

|_+_|

2. Zamiast tego użyj preg_match_all

preg_match_all może także dzielić ciągi znaków w oparciu o wzór wyrażenia regularnego, ale poprawnie obsługuje wiele ograniczników:

|_+_|

Spowoduje to podział i zachowanie ogranicznika w grupie przechwytywania 1:

|_+_|

3. Podziel, a następnie odfiltruj puste ciągi

Trzecią opcją jest trzymanie się preg_split ale w razie potrzeby odfiltruj puste ciągi znaków:

|_+_|

Inne funkcje podziału ciągów

Istnieje kilka innych funkcji podziału ciągów, które obsługują wiele ograniczników inaczej niż preg_split:

eksplodować

The eksplodować funkcja dzieli ciąg znaków na ogranicznik ciągu i poprawnie obsługuje wiele instancji:

|_+_|

Wynik:

|_+_|

str_split

str_split dzieli ciągi na pojedyncze znaki, umożliwiając dzielenie dowolnego znaku, w tym wielokrotności:

|_+_|

Wynik:

|_+_|

chunk_split

chunk_split dzieli ciągi na mniejsze części oddzielone określonym przez Ciebie ogranicznikiem. Dobry do rozbijania długich ciągów:

|_+_|

Wynik:

|_+_|

mb_split

mb_split jest przydatny do bezpiecznego dzielenia ciągów podczas obsługi znaków wielobajtowych.

Kiedy Preg_Split jest przydatny?

Pomimo pewnych dziwactw, preg_split jest nadal bardzo przydatny, gdy trzeba podzielić złożone ciągi znaków za pomocą wzorców wyrażeń regularnych. Jak na przykład:

  • Dzielenie na różne typy ograniczników w jednym ciągu
  • Dzielenie białych znaków podczas obsługi tabulatorów, spacji, znaków nowej linii itp.
  • Dzielenie z zachowaniem lub usunięciem ograniczników

Pamiętaj tylko, jak obsługuje kolejne ograniczniki i obejdź to, wyłączając PREG_SPLIT_NO_EMPTY lub w razie potrzeby stosując alternatywne podejście.

Streszczenie

  • preg_split domyślnie nie dzieli ciągów na wiele znaków ograniczników ze względu na flagę PREG_SPLIT_NO_EMPTY.
  • Rozwiązania obejmują wyłączenie PREG_SPLIT_NO_EMPTY, użycie preg_match_all lub alternatywne funkcje, takie jak eksplodować Lub str_split .
  • Zrozumienie tego zachowania pozwala w razie potrzeby obejść je, korzystając z najlepszego narzędzia do zadania dzielenia ciągów.

Zobacz Też: