Как разбить строку с несколькими разделителями, за которыми следуют пробелы или нет (смешанные)? - PullRequest
1 голос
/ 09 июля 2011

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

+ - (

может быть разделителем.

Например, после "взрыва"следующая строка:

$string = 'We are 3+4-8 - (the + champions'

Я должен получить это как $ string [0]:

['We are 3+4-8']

Есть ли какая-либо функция, которая действует таким образом?

Ответы [ 5 ]

2 голосов
/ 09 июля 2011
$string = 'We are - (the + champions';
$words = preg_split('@[\W]+@', $string)

При этом вы получаете [Мы, чемпионы]

$string = 'We are - (the + champions';
$words = preg_split('/[\+\-\(]/', $string)

При этом вы сохраняете пробелы, получая ['Мы', '', '', 'чемпионы'];было бы необходимо обрезать.

 $string = 'We are 3+4-8 - (the + champions';
 $words = preg_split('/[\+\-] |[\(]/', $string)

С этим, наконец, вы получите ['Мы 3 + 4 + 8', 'the', 'чемпионы'].В этом случае обрезка не требуется.

2 голосов
/ 09 июля 2011

Используйте preg_split() с классом символов.

$chars = '+-(';
$regexp = '/[' . preg_quote($chars, '/') . ']/';
$parts = preg_split($regexp, $string);

Забыл добавить, что если вы пытаетесь проанализировать выражения, такие как поисковые запросы, preg_split() не обрежет его, и вам понадобится полноценный анализатор. Я думаю, что в Zend Framework должен быть один.

1 голос
/ 09 июля 2011
$string = 'We are - (the + champions';

$split = preg_split('/[\-,\(,\+]/', $string);
1 голос
/ 09 июля 2011

Это разделит вашу строку на -, + или (

$result = preg_split(/[ \- ]|[ \+ ]|[(]/im, $string);
$i = 0;
foreach ($result as $match){ 
  $result[$i] = trim($match);
}
0 голосов
/ 09 июля 2011

Как насчет:

$str = 'We are 3+4-8 - (the + champions';
$res = preg_split('/\s+[+(-]\s+/', $str);
print_r($res);

Вывод:

[0] => We are 3+4-8
[1] => (the
[2] => champions
...