Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   RegExp - выделение слов ограниченных пробелами (http://www.flasher.ru/forum/showthread.php?t=136132)

Котяра 10.02.2010 17:22

RegExp - выделение слов ограниченных пробелами
 
как с помощью RegExp - получить массив слов?
например есть строка вида:
Цитата:

do param1 (12.3>=number) false
нужно получить массив
Цитата:

[do,param1,12.3,>=,number,false]
т.е. выделить слова:
- ограниченные пробелами,
- ограниченные справа знаками )
- ограниченные слева знаком (
- ограниченные с любой стороны знаком <,>,=,!
- сами знаки <,>,==,!=,<=,>=, причем <= выделяется как <=, а не <,=.
Не дружу я пока с этими регулярками, голову уже сломал совсем :(
ну или хотя бы как простейший ignoreWhite сделать? типа сократить все пробелы длиной больше 1 до 1, и удалить пробелы в конце и начале?

Wolsh 10.02.2010 18:07

Пробелы))
Код AS3:

private static const DOUBLE_SPACE_RX:RegExp = /\s+/g;
private static const ENTER_SPACE_RX :RegExp = /^\s+/g;
...
_text = _text.replace(DOUBLE_SPACE_RX, " ");
_text = _text.replace(ENTER_SPACE_RX, "");

Добавлено через 1 час 25 минут
Для первого выражения подойдет такой ход
Код:

([\w\d\.]+|[\>\<\=\-\+\*\!\/]+)
Но не знаю, как он отразится на других Ваших выражениях))

wvxvw 10.02.2010 19:44

Код AS3:

var re:RegExp = /\s+/g;
trace("          a    b  c      ".replace(re, " ")); // a b c

А остальное - похоже хочешь написать эвалюатор все-таки :) Делать это регекспом занятие неблагодарное. Лучше switch и по буковке проверять, иначе умаешься, да и нееффективно будет.
Это, выражаясь умными словами Regexp - это не тюринг-полный язык, поэтому некоторые задачи решать с его помощью сложно вплоть до невозможно.

@Wolsh
\w включает в себя цифры тоже ;)

Wolsh 10.02.2010 20:57

))) Точно. Ну можно сократить вот так -
Код:

([\w\.]+|[><!=\-+*/]+)
Только не знаю Ваше отношение к точке, разделяющей слова, вроде this.parent )))

etc 11.02.2010 08:10

Точка не разделитель.

Котяра 11.02.2010 09:47

Цитата:

Сообщение от wvxvw (Сообщение 885383)
похоже хочешь написать эвалюатор все-таки :)

Да написал уже) кроме того есть уже парсер xml, теперь вот еще хочу ECMAScript - подобный парсер одолеть, тут без regexp сложновато, просто я до вчерашнего дня регулярки вообще не знал и не использовал нигде)
а насчёт тюринг-полноты.. Сами регэкспы неполны, но Regexp+ replace/match итп, очень даже..

etc,Wolsh,wvxvw - спасибо, буду втыкать дальше..

Добавлено через 19 минут
Цитата:

Сообщение от Wolsh (Сообщение 885405)
))) Точно. Ну можно сократить вот так -
Код:

([\w\.]+|[><!=\-+*/]+)
Только не знаю Ваше отношение к точке, разделяющей слова, вроде this.parent )))

this.parent не будет)
тут
Код:

([\w\.]+|[><!=\-+*/]+)
у вас ошибка или я что-то недопонял?

ЗЫ.. понял) нужно было экранировать /, ну мне эти операции (-,+,*,/) пока ни к чему, нужны только отношения.. причем надо чтоб "-80" - одной строкой
В общем получилось так:
Код AS3:

private static const FULL_RX :RegExp = /([\w\.\-]+|[><!=]+)/g;
..
                static private function toCommand(str:String):Array
                {                       
                        var arr:Array = str.match(FULL_RX);
                        trace("arr : " + arr);
                        return arr;
                }



Часовой пояс GMT +4, время: 11:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.