Разделение строки на несколько разделителей в PHP - PullRequest
1 голос
/ 25 июля 2011

Я могу разделить строку запятой, используя preg_split, например

$words = preg_split('/[,]/', $string);

Как я могу использовать точку, пробел и точку с запятой, чтобы разделить строку с любым из них?

PS. Я не смог найти подходящий пример на странице PHP preg_split, поэтому и спрашиваю.

Ответы [ 6 ]

7 голосов
/ 25 июля 2011

Попробуйте это:

<?php

$string = "foo bar baz; boo, bat";

$words = preg_split('/[,.\s;]+/', $string);

var_dump($words);
// -> ["foo", "bar", "baz", "boo", "bat"]

Шаблон объяснил

[] - это класс символов, класс символов состоит из нескольких символов и соответствует одному из символов, которые находятся внутри класса

. соответствует символу ., его не нужно экранировать внутри классов символов. Хотя это нужно избегать, когда нет в классе символов, потому что . означает «соответствовать любому символу».

\s соответствует пробелу

;, чтобы разделить точку с запятой, это не должно быть экранировано, потому что это не имеет особого значения.

+ в конце гарантирует, что пробелы после разделенных символов не будут отображаться как совпадающие

3 голосов
/ 25 июля 2011

Примеры есть, возможно, не буквально, но есть разделение с несколькими опциями для разделителя

$words = preg_split('/[ ;.,]/', $string);
2 голосов
/ 25 июля 2011

как то так?

<?php
$string = "blsdk.bldf,las;kbdl aksm,alskbdklasd";
$words = preg_split('/[,\ \.;]/', $string);

print_r( $words );

результат:

Array
(
    [0] => blsdk
    [1] => bldf
    [2] => las
    [3] => kbdl
    [4] => aksm
    [5] => alskbdklasd
)
1 голос
/ 25 июля 2011

просто добавьте эти символы в выражение

$words = preg_split('/[;,. ]/', $string);

РЕДАКТИРОВАТЬ : благодаря Игорю Азанову, экранирование точки в классе символов не требуется;)

1 голос
/ 25 июля 2011
$words = preg_split('/[\,\.\ ]/', $string);
0 голосов
/ 25 июля 2011
$words = preg_split('/[,\.\s;]/', $string);
...