[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разбить строку и занести в массив по правилу - PHP
mikolas
Добрый день есть строка например
тестовая строчка, test "тестовая строчка".'тестовая строчка'!?:;-
Мне нужно занести в массив эту строчку по словам и знакам препинания, но при этом все словосочетания которые находятся в кавычках заносить в одну ячейку, знаки препинания, то же в отдельную ячейку На том примере что я привел должно получиться

$array = [
'тестовая',
'строчка',
',',
'test',
'"тестовая строчка"',
'.',
'\'тестовая строчка\'',
'!',
'?',
':',
';',
'-'
];

спасибо
walerus
mikolasСвои мысли есть как это сделать?
mikolas
Я планирую сначала отделить знаки препинания пробелом а вот как быть с кавычками не знаю
FatCat
Разбить в массив по кавычкам; а затем все четные элементы массива разбить по пробелам и знакам препинания.

_____________
Бесплатному сыру в дырки не заглядывают...
Kusss
Честно говоря я совершенно не умею работать с регулярками. Получилось вот такое нечто.
$text = "тестовая строчка, test \"тестовая строчка\".'тестовая строчка'!?:;-";
$parents = '/
(?P<Collocation1>
\'(.)+\' ) # словосочетание в одиночных ковычках
|
(?P<Collocation2> \"(.)+\" ) # словосочетание в двойных ковычках
|
(?P<word> [а-яА-ЯёЁa-zA-Z]+ ) # слово
|
(?P<no_word> [^\s] ) # Остальные символы кроме пробела. Если нужны и пробелы, заменить на \W
/iux'
;

preg_match_all($parents, $text, $math);
print_r($math[0]);
и результат
Array
(
[0] => тестовая
[1] => строчка
[2] => ,
[3] => test
[4] => "тестовая строчка"
[5] => .
[6] => 'тестовая строчка'
[7] => !
[8] => ?
[9] => :
[10] => ;
[11] => -
)
P.S. Просто было любопытно получится или нет
http://sandbox.onlinephpfunctions.com/code...b02098df03f9bd6
mikolas
Kusss спасибо за пример очень помог думал делать через preg_split()
как FatCat говорил единственная загвоздка в том что если в тексте два раза встречаются кавычки
Kusss
дай пример текста.
walerus
Код:
$str = 'тестовая строчка, test "тестовая строчка".\'тестовая строчка\'!?"тестовая строчка_1":;\'тестовая строчка_1\'-';

$delimiters = "(\s\W)";
$char_buff = preg_split( '/([' . $delimiters . '])/muiUs', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

$result = array();
$add = false;
$tmp_string = '';
foreach( $char_buff => $char_buff_value ){

if( $char_buff_value != '"' && $char_buff_value != "'" && $add == false ){

$result[] = $char_buff_value;

}else{

if ( $add == true && ( $char_buff_value == '"' || $char_buff_value == "'" ) ){
$add = false;
$tmp_string .= $char_buff_value;
$result[] = $tmp_string;
$tmp_string = '';
}else{
$add = true;
$tmp_string .= $char_buff_value;
}
}
}


print_r($result);
Результат:
Array
(
[0] => тестовая
[1] =>
[2] => строчка
[3] => ,
[4] =>
[5] => test
[6] =>
[7] => "тестовая строчка"
[8] => .
[9] => 'тестовая строчка'
[10] => !
[11] => ?
[12] => "тестовая строчка_1"
[13] => :
[14] => ;
[15] => 'тестовая строчка_1'
[16] => -
)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.