Разделение строки на несколько разделителей в PHP

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

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

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

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


person Roman    schedule 25.07.2011    source источник


Ответы (5)


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

<?php

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

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

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

Объяснение шаблона

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

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

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

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

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

person chh    schedule 25.07.2011
comment
@chh: точка (.) - это просто точка внутри класса символов, и ее не нужно экранировать. - person nikc.org; 25.07.2011
comment
ООО Спасибо. Я думаю, экранирование специальных символов регулярных выражений - это своего рода привычка :-) - person chh; 25.07.2011

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

$words = preg_split('/[ ;.,]/', $string);
person nikc.org    schedule 25.07.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
)
person ariefbayu    schedule 25.07.2011
comment
но, если нет точки(.), точки с запятой(;), пробела или запятой(,), то как это сделать. - person JH_; 24.03.2017
comment
Откройте другой вопрос с вашим конкретным вопросом. Этот вопрос специально задавался о точке, точке с запятой, пробеле или запятой. - person ariefbayu; 28.03.2017

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

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

EDIT: благодаря Игорису Азановасу экранирование точки в классе символов не требуется ;)

person rabudde    schedule 25.07.2011
comment
Не нужно бежать. внутри скобок - person Igoris Azanovas; 25.07.2011

person    schedule
comment
Слишком \mu\ch u\necce\ss\ary \e\s\c\a\p\i\n\g \i\n этот\s \res\wer. - person mickmackusa; 24.03.2021