Страница 1 из 1

regexp

Добавлено: 01 дек 2003, 12:43
kavenchuk
Книжку умную купил - читаю. Но это не так быстро (лирическое отступление в свое оправдание :))
Суть: нужна парочка выражений:
1. если в строке нечетное количество двойных кавычек (") - заменить конец строки \n на \\n и доклеить следующую строку в хвост этой.
2. если символ табуляции \t стоит после нечетного количества двойных кавычек (") от начала строки - заменить на \\t.
Если простыми выражениями этого не сделать - ладно, буду штудировать дальше книжку.

Добавлено: 01 дек 2003, 13:11
mend0za
1. и 2. можно реализовать imho только совместно с каким-нить языком программирования.

Добавлено: 01 дек 2003, 20:06
leikind
вот этот регексп

Код: Выделить всё

^(\"\")*\"\t
сработает для
символ табуляции \t стоит после нечетного количества двойных кавычек (") от начала строки

Добавлено: 02 дек 2003, 00:29
leikind
Не совсем я правильно ответил - имелась ввиду то строка ,где " могут быть расположены неконтактно. Тогда немного добавим в регексп, чтобы упростить понимание, я считаю не '"', а символ 'a', принцип подсчета нечетности все равно один. Пример на Ruby, но регексп будет работать и в других языках:

Код: Выделить всё

["qqq", "qqqaqqq", "qqqaqqqaqqq", "qqqqaqqqqaqqqqa"].each{|str|
     puts str + " -> " + str.sub(/^([^a]*?a[^a]*?a)*?[^a]*?a[^a]*$/,"нечет")
}
выход:

Код: Выделить всё

qqq -> qqq
qqqaqqq -> нечет
qqqaqqqaqqq -> qqqaqqqaqqq
qqqqaqqqqaqqqqa -> нечет