LINUX.ORG.RU

Практика по регекпам? Где взять?

 


1

1

Знаю сабж на уровне, где то между начальным и средним. Хотелось бы владеть на хорошем уровне, но не знаю, как практиковаться. Самому себе задания придумывать надоело, хочеться реальных задач. Все что есть из этого иногда отвечаю на вопросы по регекпам на форумах. Книгу фридла читать скучно, без реальных задач, не хватает терпения и усидчивости, тк нет азарта.

Посоветуйте, где брать реальные задачи, для оттачивания навыков.



Последнее исправление: regexp_regexp (всего исправлений: 1)

Ответ на: комментарий от TDrive

Может быть, но как начать, как выбрать простые задачи, не смежные с другими технологиями и ЯП, фреймверками, как это все найти, где, я хз, а так я думал об этом уже.

regexp_regexp
() автор топика
Ответ на: комментарий от regexp_regexp

Ищи задачи где требуется написать какой нибудь парсер или перевести данные из одного формата в другой, базу телефонов там с какого нибудь сайта собрать...

не смежные с другими технологиями и ЯП

Один яп как минимум тебе все равно понадобится, на котором ты и будешь решать задачи.

TDrive ★★★★★
()

опыт да, фриланс, только не забудь здесь почитать: http://swtch.com/~rsc/regexp/regexp1.html

цитата:

Notice that Perl requires over sixty seconds to match a 29-character string. The other approach, labeled Thompson NFA for reasons that will be explained later, requires twenty microseconds to match the string. That's not a typo. The Perl graph plots time in seconds, while the Thompson NFA graph plots time in microseconds: the Thompson NFA implementation is a million times faster than Perl when running on a miniscule 29-character string. The trends shown in the graph continue: the Thompson NFA handles a 100-character string in under 200 microseconds, while Perl would require over 10^15 years. (Perl is only the most conspicuous example of a large number of popular programs that use the same algorithm; the above graph could have been Python, or PHP, or Ruby, or many other languages. A more detailed graph later in this article presents data for other implementations.)

emulek
()

Странная вообще-то постановка задачи - знать регекспы. Я бы на твоем месте просто прочитал обзорно, что они могут, чего не могут - а составлял их, когда реально понадобятся.

Все что есть из этого иногда отвечаю на вопросы по регекпам на форумах.

Отвечай чаще. Зарегистрируйся на stack overflow, читай вопросы, ответы, сам отвечай.

anonymous
()
Ответ на: комментарий от TDrive

Врятли ТС найдет заказ, который целиком и полностью состоит из написания регулярного выражения без использования языков программирования в связке.

Razip ★★
()
Ответ на: комментарий от anonymous

Странная вообще-то постановка задачи - знать регекспы. Я бы на твоем месте просто прочитал обзорно, что они могут, чего не могут - а составлял их, когда реально понадобятся.

Если не знаешь теорию, то получается over 10^15 years.

emulek
()

перейти с notepad.exe на редактор с поддержкой regexp и использовать в работе для рефакторинга

avsej
()
Ответ на: комментарий от heilkitty

Телефоны как раз собрать можно, для этого не нужно парсить XML.

anonymous
()
Ответ на: комментарий от heilkitty

Это все религиозные предпочтения. У человека какая задача? Поднять скилл в регулярках, вот пускай и парсит все что попадется под руку регулярками.

TDrive ★★★★★
()

Где взять, где взять...на лоре взять. У меня.
Для разбора лога надо вытащить Action, Action1, Action2 из таких строк:
{prefixActionsuffix}{Marker}
{prefixAction1suffix}{prefixAction2suffix}{Marker}

можно ли это сделать регуляркой?

zolden ★★★★★
()
Ответ на: комментарий от regexp_regexp

Я так понял, ему надо то, что в фигурных скобках между prefix и suffix.

heilkitty ★★
()
Ответ на: комментарий от regexp_regexp

Я честно старался внятно объяснить что надо вытащить, давай ещё раз попробуем.
В строке
{prefixNNNsuffix}{Marker}
надо вытащить всё что находится между {prefix и suffix}{Marker}, т.е. в данном случае NNN

Для строки
{prefixAAAsuffix}{prefixBBBsuffix}{Marker}
мне труднее формализировать условие, надо вытащить находящееся между {prefix и suffix} или {prefix и suffix}{Marker}, но (...тут несколько оговорок...). На выходе надо иметь AAA и BBB

В логе могут встречаться и те и другие варианты (а могут только первые, или только вторые), поэтому хотелось бы в идеале обойтись использованием одной регулярки

zolden ★★★★★
()
Последнее исправление: zolden (всего исправлений: 1)
Ответ на: комментарий от heilkitty

Так у него состояние делирия горками - его банят, он принимает галоперидол и берёт новый ник, через недельку ремиссия заканчивается и его опять банят за агрессивный клинический кретинизм. А так «реальные задачи» - стандартная мантра всех блаженных, и царька, и анонимуса, и напильника.

aedeph_ ★★
()
Ответ на: комментарий от heilkitty

В ответике речь про теоретические регекспы. На практике «регекспы» из перла или руби, например, могут парсить контекстнонезависимые грамматики.

anonymous
()
Ответ на: комментарий от DELIRIUM

Я для проверки использую вот этот дебагер.

В меру своего понимания попытался подебажить (заэкранировать фигурные скобки), но не взлетело - ничего не матчится

zolden ★★★★★
()
Ответ на: комментарий от zolden

Совсем одним че то пока не получилось, последнюю строку придется обрезать


s=fs.readFileSync("log", "ascii")
console.log(
  s.replace(/([\s\S]*?prefix)(.*?)(suffix.*?)/gm, "$2\n")
)

//  Action
//  Action1
//  Action2
//  }{Marker}
Позжне еще подумаю, спасибо

regexp_regexp
() автор топика
Ответ на: комментарий от zolden

ЗЫ платформа  — нода

Вот так будет надежней, наверное


s=fs.readFileSync("log", "ascii")
console.log(
  s.replace(/([\s\S]*?prefix)([\s\S]*?)(suffix[\s\S]*?)/g, "$2\n")
)

//  Action
//  Acti
//  on1
//  Action2
//  Action1
//  Action2
//  }{Marker}
учитывая возможные случаи
{prefixActionsuffix}{Marker}
{prefixActi
on1suffix}{prefixAction2suffix}{Marker}
{prefixAction1suffix}{prefixAction2suffix}{Marker}
«непредвиденных» переносов строк. А флаг m не нужен в обеих вариантах

regexp_regexp
() автор топика
Ответ на: комментарий от zolden

Так это перловый код, не факт, что он соответствует диалекту питона.

DELIRIUM ☆☆☆☆☆
()

Тут всё просто, нет реальных задач - не учите регэкспы. Отточенные навыки без практики забываются очень быстро, поэтому оттачивание ради оттачивания - пустая трата времени. С чего вообще вы решили оттачивать именно регэкспы? Почему не аквариумистика или оригами?

slovazap ★★★★★
()
Ответ на: комментарий от regexp_regexp

крутотенюшка, а можно попросить ещё об одном допилинге раз сразу replace используется?
В случае двойной группы {prefixAction1suffix}{prefixAction2suffix}, Action2 является «подклассом» Action2, то есть в идеале надо как то отслеживать что это матчится двойная группа. В текущем варианте получится что это отдельные несвязанные сущности.
Сейчас у меня используется нагромождение костылей и replace {} на ->
Т.е. так выводится Action1->Action2

zolden ★★★★★
()
Ответ на: комментарий от slovazap

С чего вообще вы решили оттачивать именно регэкспы?

Мне кажется, это одно из самых мощных средств в программировании, и вообще, если не самое. Мне кажется, это надо знать в первую очередь.

regexp_regexp
() автор топика
Ответ на: комментарий от zolden

Вот такой вариант исходный текст:

{prefixActionsuffix}{Marker}
{prefixActi
on1suffix}{prefixAction2suffix}{Marker}
{prefixAction1suffix}{prefixAction2suffix}{Marker}
код
s=fs.readFileSync("log", "ascii")
console.log(
    s.replace(/\{prefix([^}]+)suffix\}/g, ">$1")
    .replace(/\{[\s\S]*?\}/g, "|||")
    .replace(/[\r\n]+/g, "")
    .replace(/\|\|\|/g, "\n")
)

//  >Action
//  >Action1>Action2
//  >Action1>Action2

s=fs.readFileSync(«log», «ascii») console.log( s.replace(/\{prefix([^}]+)suffix\}/g, «>$1») .replace(/\{[\s\S]*?\}/g, «|||») .replace(/[\r\n]+/g, "") .replace(/\|\|\|/g, «\n») )

// >Action // >Action1>Action2 // >Action1>Action2

regexp_regexp
() автор топика
Ответ на: комментарий от regexp_regexp

выглядит годно, спасибо.
в качестве дз попробую это запустить под питоном

zolden ★★★★★
()
Ответ на: комментарий от regexp_regexp

С чего вообще вы решили оттачивать именно регэкспы?

Мне кажется, это одно из самых мощных средств в программировании, и вообще, если не самое.

Регэкспы? Srsly? А ДКА (FSM) как?)

Stil ★★★★★
()
Ответ на: комментарий от aedeph_

Ты что, оспариваешь это утверждение?

anonymous
()

Советую почитать книгу с совами и поиграть с примерами из неё.

holuiitipun
()
Ответ на: комментарий от aedeph_

«реальные задачи» - стандартная мантра всех блаженных, и царька, и анонимуса, и напильника.

жаль, что от тебя я слышу лишь оскорбления.

emulek
()
Ответ на: комментарий от slovazap

Отточенные навыки без практики забываются очень быстро

потому нужно изучать теорию. Теория не забывается, в отличие от зубрёжки правил.

emulek
()
Ответ на: комментарий от regexp_regexp

Мне кажется, это одно из самых мощных средств в программировании, и вообще

просто один из ЯП. Причём даже не тьюринг-полный.

emulek
()
Ответ на: комментарий от emulek

я написал и оно работает, мы тут про другое - про спортивный интерес и рост над собой, а для этого надо в один регексп всё уместить

zolden ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.