Форум → Программирование → PHP для идиотов → preg_split пробелов, которые не в кавычках
preg_split пробелов, которые не в кавычках
-
есть такая строка
test "hello world" blah 'fuck off'
какая нужна регулярка, чтобы в результате обработки получилось так (array):
test
hello world
blah
fuck off
то есть строка эксплодится по пробелам, которые не в кавычках
мой вариант (очень уевый):
заменять пробелы в кавычках какими нибудь символами типа "!@#$%", потом просто эксплодить по пробелу и заменять в результате эти символы обратно на пробелы
нет -
-
21 апреля 2009 г. 0:25, спустя 3 часа 17 минут 36 секунд
первоначальная замена + ксплод и последующая обратная замена.Сапожник без сапог -
21 апреля 2009 г. 12:28, спустя 12 часов 3 минуты 29 секунд
тоесть это не уевый вариант а самое то?) -
21 апреля 2009 г. 12:31, спустя 2 минуты 22 секунды
aivee, хуевый вариант - думатьСапожник без сапог -
21 апреля 2009 г. 12:36, спустя 4 минуты 58 секунд
ну в принципе да, тут nенадо думать. а если в исходном тексте есть уже !@#$%
и заменять потом !@#$% нужно будет в цикле
$command = preg_replace('#"(.+?) (.+?)"#i', '\\1!@#$%\\2', mb_strtolower($command, 'utf-8'));
$parts = explode(' ', $command);
$result = array();
foreach ($parts as $word)
{
$result[] = str_replace('!@#$%', ' ', $word);
} -
-
-
21 апреля 2009 г. 13:12, спустя 14 минут 1 секунду
Обрезать всё нахуй по кавычкам.
Нечётные элементы, это то что вне кавычек - порубить по пробелам.
Чётные - то что в кавычках - оставить как есть.
:) -
21 апреля 2009 г. 13:13, спустя 1 минуту
Задолбали, толком не тестировал, но думаю принцип понятен
$str = trim($str).' ';
preg_match_all ('#(".+"\s)|(\'.+\'\s)|(.*\s)#U', $str, $words);
print_r($words[0]); -
21 апреля 2009 г. 19:52, спустя 6 часов 39 минут 6 секунд
убейтеменя<?php
$str = "foo test \"hello world\" fdsaf blah ' fuck off ' foo ";
define('STATE_SPACE', 0);
define('STATE_WORD', 1);
define('STATE_QUOTE', 2);
$len = strlen($str);
$res = array();
$state = STATE_SPACE;
for ($i = 0, $j = -1; $i < $len; ++$i) {
$ch = $str[$i];
switch ($state) {
case STATE_SPACE:
if ($ch == '"' || $ch == "'") {
$res[++$j] = '';
$state = STATE_QUOTE;
} else if (ctype_alnum($ch)) {
$res[++$j] = $ch;
$state = STATE_WORD;
}
break;
case STATE_QUOTE:
if ($ch != '"' && $ch != "'") {
$res[$j] .= $ch;
} else {
$state = STATE_SPACE;
}
break;
case STATE_WORD:
if ($ch == '"' || $ch == '"') {
$state = STATE_QUOTE;
} else if ($ch == ' ' || $ch == '\n' || $ch == '\t') {
$state = STATE_SPACE;
} else {
$res[$j] .= $ch;
}
break;
}
}
var_dump($res);
кавычек (' от ") не различает -
-
21 апреля 2009 г. 20:31, спустя 8 минут 55 секунд
Timur, давай адрес )https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
Пожалуйста, авторизуйтесь, чтобы написать комментарий!