![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+4 06.05.14]
|
Есть у нас вот такая строка например
Нужно создать массив. Я так понимаю регэкспы? Но что то не приходит в голову решение...
Массив соотв такой должен получится
__________________
Марк Tween |
|
|||||
|
Если задача общая, варианта 2:
- углубляемся в регулярки - пишем свой парсер на базе машинки состояний Парсер читает строку посимвольно, реализация машинки - свичами (другие способы слишком неэффективны) Состояния здесь такие: 1. Ждем символ/цифра или открывающую кавычку если символ/цифра - переходим в 2 если открывающая кавычка - переходим в 3 если пробел - ничего не делаем, идем к следующему символу 2. Ждем пробел (набиваем попутно текущую строку) если кавычка - вываливаемся с ошибкой если символ/цифра - набиваем строку если пробел - добавляем строку в массив, переходим в 1 3. Ждем закрывающую кавычку если символ/цифра - набиваем строку если кавычка - добавляем строку в массив, переходим на 1 По завершении строки надо добавить последнюю набитую строку в массив. Примерно так. |
|
|||||
|
split по кавычке, потом идём по этому массиву, чётные индексы(0й, 2й) будут вне кавычек, нечётные (1й 3й) будут то что в ковычках, соотственно чётные ещё раз сплитим по пробелу, нечётные так пашим.
__________________
:) |
|
|||||
|
[+4 06.05.14]
|
Блин это жутко сложно))) я думал варианты по проще есть)))
Саня, а что значит для конкретной в данном случае? Строки могут быть любыми, но задача всегда такая, что есть внутри строки с пробелами
__________________
Марк Tween |
|
|||||
|
Цитата:
Как бы написать цикл, бегущий побуквенно по строке и в нем свитч из 3-х case-ов - ИМХО самое тупое что может прийти в голову, если не считать себя супер-гуру, который обязан пользоваться регулярками. |
|
|||||
var s:String = "a b с 1 '1233434 GIVE IT' 'DO IT 15'"; var arr1:Array = s.split("'"); var result:Array = new Array; for (var i:int=0; i < arr1.length; i++) { if (i%2) result.push(arr1[i]); else result = result.concat((arr1[i] as String).split(" ")); } trace(result); Добавлено через 32 секунды Добавлено через 13 минут если кавычка одна может встречаться в слове и bdssd'dsfsdf далжно быть выделено отдельно, то только конечный атомат, очень легко и удобно.
__________________
:) Последний раз редактировалось Aquahawk; 04.07.2012 в 20:43. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|