| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Умная регулярка |
| Автор: rcdimon 20.6.2006, 14:40 |
| Мне нужно сделать что бы программа вырезала из строки пробелы. Но только если они не между кавычками. до: 1 2 345 после: 12345 до: 1 2 345 "6 7" '8 9' после: 12345"6 7"'8 9' кавычки могут быть двух типов ' и " |
| Автор: nitr 20.6.2006, 22:24 | ||
| Привет! Держи
работает для пар ковычек т.е. ' ' или " " |
| Автор: rcdimon 21.6.2006, 06:35 |
| Прикольно. Спасибо! |
| Автор: rcdimon 21.6.2006, 09:52 |
| кстати она у тебя срабатывает на 'weruiy" А кавычки то разные И вот еще на умную регулярку. Надо сделать split my @mass = split(//, $str); Надо что бы эта штука разрезала строки по символам - или +. Причем эти символы НЕ ДОЛЖНЫ быть в скобках Выражение: 123+3789-378 Результат- массив: 123 + 3789 - 378 Выражение: 1+(2+3) результат-массив: 1 + (2+3) |
| Автор: nitr 21.6.2006, 11:00 | ||||
|
| Автор: rcdimon 21.6.2006, 13:33 |
| немного изменил твое выражение. Теперь она находит то что между кавычками только в том случае если открываюая кавычка такая же как закрывающая Найдет 'shdjk', найдет "оавлд" Не найдет 'dfjkl" или "dfj' $str =~ s{((['"]).+?\2)|\s}{$1}g; просто добавил ссылку назад. А кто мне поможет со split? |
| Автор: sharq 21.6.2006, 23:26 | ||||
| rcdimon, если тебе нужно работать с математическими формулами, то советую воспользоваться алгоритмом раскрытия скобок или определения выражения. Вот пример, который позволяет распарсить выражение так, как тебе надо, только если скобок внутри скобок нет.
Можно сразу сделать так, если тебе не важен порядок следования:
|
| Автор: rcdimon 21.6.2006, 23:42 |
| Вообще-то мне просто надо разрезать по -|+ только не в скобках |
| Автор: sharq 22.6.2006, 00:54 |
| rcdimon, вообще-то запусти первый вариант |
| Автор: rcdimon 22.6.2006, 05:55 |
| не... скобки могут быть вложенные... Вот самое умное что мне удалось сделать (?<!\()([\-|\+])(?!\)) 1 + 2 - 333 - (-) Порежет на 1 + 2 - 333 - (-) прямо как надо но если будет не (-) а например ( - ) Но все... ничего хорошнго тут получается что если скобка не вплотную к знаку то она уже ее не видит. Не увидит и (1 + 33) |
| Автор: sharq 22.6.2006, 10:47 |
| rcdimon, в чем проблема тогда, поставь \s* |
| Автор: rcdimon 22.6.2006, 12:33 |
| мне не надо \s Там могут быть любые символы ( 2 + 34 ) например Могут быть и буквы и символы типа $@% и т.д. Вот... а ставить типа .+ Я пытался... нифига |