AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Регулярные выражения
Goto page Previous  1, 2, 3, 4 ... 15, 16, 17  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Drugmix



Joined: 08 Apr 2013
Posts: 394

PostPosted: Mon Sep 23, 2013 11:14 am    Post subject: Reply with quote

opk44 wrote:
Drugmix wrote:
По-моему, все проблемы связанные с жадностью - исчезли бы, если была бы добавлена поддержка настройки U (ungreedy), которую можно было бы в шаблоне включать и отключать многократно, в нужных местах шаблона.
1. У каждого есть право на собственное мнение.
2. Не вижу особых преимуществ у "U" перед уже имеющимся "?". Тем самым не понимаю, почему бы это введение еще одного регулятора нежадности могло вдруг решить "все проблемы связанные с жадностью".

1. У Вас есть право хранить молчание! Wink
2. Так можно было бы их комбинировать:
haystack: aaabbbcccaaabbbccc
a.*c matches aaabbbcccaaabbbccc
a.*?c matches aaabbbcccaaabbbc
U)a.*c matches aaabbbc
U)a.*?c matches abbbc

Это я просто в качестве примера привёл (даже вероятно, что довольно мало продуманного).
Ведь удобней же, когда правила можно более удобно (и более гибкие) создавать.
Back to top
View user's profile Send private message
opk44



Joined: 16 Jan 2010
Posts: 326

PostPosted: Mon Sep 23, 2013 2:21 pm    Post subject: Reply with quote

Drugmix wrote:
opk44 wrote:
Drugmix wrote:
По-моему, все проблемы связанные с жадностью - исчезли бы, если была бы добавлена поддержка настройки U (ungreedy), которую можно было бы в шаблоне включать и отключать многократно, в нужных местах шаблона.
1. У каждого есть право на собственное мнение.
2. Не вижу особых преимуществ у "U" перед уже имеющимся "?". Тем самым не понимаю, почему бы это введение еще одного регулятора нежадности могло вдруг решить "все проблемы связанные с жадностью".

1. У Вас есть право хранить молчание! Wink
2. Так можно было бы их комбинировать:
haystack: aaabbbcccaaabbbccc
a.*c matches aaabbbcccaaabbbccc
a.*?c matches aaabbbcccaaabbbc
U)a.*c matches aaabbbc
U)a.*?c matches abbbc

Это я просто в качестве примера привёл (даже вероятно, что довольно мало продуманного).
Ведь удобней же, когда правила можно более удобно (и более гибкие) создавать.

1. Во-первых, не нужно хамить, ироничный Вы наш.
2. Во-вторых, вы меня опять не поняли.
3. В-третьих, не ясно на чем проверялись ваши примеры (они проверялись?). Думается, (2)и(4) не корректны.
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 394

PostPosted: Mon Sep 23, 2013 2:59 pm    Post subject: Reply with quote

opk44 wrote:
1. Во-первых, не нужно хамить, ироничный Вы наш.
2. Во-вторых, вы меня опять не поняли.
3. В-третьих, не ясно на чем проверялись ваши примеры (они проверялись?). Думается, (2)и(4) не корректны.

1.
Какое хамство? Я и не думал хамить. Просто не понятно к чему Вы написали, что каждый имеет право на своё мнение - это же и так всем понятно. И я тут делюсь своими соображениями тоже в виде высказывания лишь своего мнения. А на утверждение очевидного я всегда отвечаю аналогичным утверждением, это не хамство.
2. И Вы даже не расскажете в чём я Вас не понял?

3. Они не проверялись, но они не могут быть некорректными: сейчас товарищ Instructor переделывает парсинг шаблонов регулярных выражений в акелпаде. Переделать он его может так, как захочет, а я лишь предложил ещё один вариант как это сделать. Мой вариант может не нравиться или показаться непродуманным кому-либо, но он не может быть некорректным т.к. это лишь идея и пока она не реализована в коде - то и проверять-то нечего.
Или в предлагаемом мной варианте должна быть какая-то логическая ошибка, которая делает мой вариант невозможным для реализации. Если Вы заметили такую ошибку - то, пожалуйста, укажите на неё и поясните почему Вы считаете, что это не будет работать.
Back to top
View user's profile Send private message
F. Phoenix



Joined: 24 Dec 2011
Posts: 124

PostPosted: Wed Sep 25, 2013 12:05 am    Post subject: Reply with quote

YuS wrote:
Ну, не знаю... а в чем слабость? Неудобность - больше дело привычки, наверное.

Ну, я начал юзать регулярки на платформе .NET, под которую в основном и пишу - и вот там они довольно сильные: с поддержкой Юникода, именованных ссылок и т.п. (MSDN) - сильнее, чем JS... Но Акел сейчас и до нее не дотягивает. Слаб и неудобен в первую очередь из-за неполной поддержки модификаторов жадности и неоднозначности некоторых моментов (регулярки ж что формулы - тут точность важна), а во-вторых из-за нехватки терпимости к неоптимальным шаблонам. А привыкнуть к несколько отличному набору правил-то можно, конечно, лишь бы он был достаточно целостным, гармоничным и точным.
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 394

PostPosted: Sat Sep 28, 2013 6:40 pm    Post subject: Reply with quote

Instructor
будут ли ещё какие-то изменения в работе RegEx или уже можно рассчитывать на то, что текущая тестовая версия станет релизной?

Мне важно это знать, т.к. я бы тогда начал правила создавать для .coder-файла, их потребуется добавить много, а если работа RegEx из тестовой версии ещё под вопросом - то я пока не стал бы начинать этого делать.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5325

PostPosted: Tue Oct 01, 2013 5:32 am    Post subject: Reply with quote

Drugmix
Как минимум необходимо устранить указанное выше зависание.
Back to top
View user's profile Send private message Send e-mail
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5325

PostPosted: Sat Oct 12, 2013 6:41 am    Post subject: Reply with quote

Drugmix wrote:
в последней тестовой версии, правило
Code:
0   `(")((?:[^"]*(?:"")?)*)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`

вешает AkelPad навсегда...
Тестовая версия
Back to top
View user's profile Send private message Send e-mail
Drugmix



Joined: 08 Apr 2013
Posts: 394

PostPosted: Sat Oct 12, 2013 11:14 am    Post subject: Reply with quote

Instructor
Акелпад оно теперь не вешает, но и работает иначе. Если напечатать
Code:
asda " asdasd " asdasd "  sadasd

то левая часть в кавычках - не окрашивается. Причём если скопировать этот текст, открыть новую вкладку и вставить его - то левая часть окрасится (до тех пор, пока пользователь не начнёт дальше что-то печатать):
Back to top
View user's profile Send private message
yozhic



Joined: 20 Jun 2011
Posts: 48
Location: Электросталь

PostPosted: Mon Oct 14, 2013 10:24 am    Post subject: Reply with quote

В тексте есть теги [aaa]...[/aaa], нужно заменить их на [bbb]...[/bbb].
Найти: \[(/?)aaa\]
Заменить: [\1bbb]
Регулярные выражения включены
Если менять поштучно кнопкой Replace, то обрабатывает корректно (точнее как задумано), а если нажать Replace All, то во все теги проставляет слэши [/bbb]...[/bbb]. В EmEditor то же выражение обрабатывается корректно в обоих случаях. Если ошибка в выражении, прошу подсказать почему (хотя бы кратко).
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5325

PostPosted: Mon Oct 14, 2013 3:29 pm    Post subject: Reply with quote

Drugmix
Тестовая версия

yozhic
Не воспроизводится. Версия 4.8.5?
Back to top
View user's profile Send private message Send e-mail
yozhic



Joined: 20 Jun 2011
Posts: 48
Location: Электросталь

PostPosted: Mon Oct 14, 2013 6:19 pm    Post subject: Reply with quote

Instructor
4.8.5 (простите сразу не сказал). Только что воспроизвёл на новом файле (правда частично). Текст:
[aaa]ccc[/aaa]
ccc [aaa]ccc[/aaa] [aaa]ccc[/aaa]
Если сразу нажать Replace All, то заменяет корректно. Если нажать Replace 2 раза и потом (при выделенном [aaa]) Replace All, то первое [aaa] заменится на [/bbb], а остальные корректно. Если нужно могу выслать фрагмент текста, где у меня во всех тегах слэши проставились.
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 394

PostPosted: Mon Oct 14, 2013 9:56 pm    Post subject: Reply with quote

Instructor
вроде бы всё нормально, только теперь мне нужна помощь в составлении более точного правила для winget.
Текущее правило
Code:
0   `^\s*(WinGet)(?:\s*,\s*|\s+)(.*)(\s*,\s*(.*)(\s*,\s*(.*)(\s*,\s*(.*)(\s*,\s*(.*)(\s*,\s*(.*))?)?)?)?)?` `\1=(2,${OP},0) \2=(2,${VAR},#00ff00) \4=(2,${OP},#ff0000) \6=(2,${VAR},#0000ff) \8=(2,${OP},#ff0000) \10=(2,${VAR},#00ff00) \12=(2,${OP},#0000ff)`

имеет 2 проблемы:
1. в строке
Code:
winget, a           

все пробелы после "a" - тоже окрашиваются до тех пор, пока не поставить запятую, а судя по RegExp-у, насколько я понимаю, - не должно бы.
2. совсем забыл про комментарии:
Code:
winget a ; это комментарий. Он не должен бы раскрашиваться, но раскрашивается тем же цветом, что и "a".

Code:
/*
winget, это многострочный комментарий, но он раскрашивается как код, что есть ошибка и чего не происходит в текущей стабильной версии акелпада
*/

т.е. бывают 2 вида комментариев: внутристрочные и многострочные.

Внутристрочные начинаются с \s+; (т.е. любого положительного кол-ва "пробельных символов" и следующей за ними точкой с запятой), а заканчиваются символом новой строки или символом конца документа.
Многострочные комментарии начинаются с ^\s*/\* - т.е. с новой строки, затем может идти любое кол-во "пробельных символов" (можно и 0), а затем должно идти /*
а заканчиваются многострочные комментарии на ^\s*\*/ - т.е. с новой строки, затем может идти любое кол-во "пробельных символов" (можно и 0), а затем должно идти */


Сейчас на стабильной версии AkelPad с правилом
Code:
0   `^\s*(WinGet)(?:\s*,\s*|\s+)(.*)(?:\s*,\s*|\s+)((.*)(?:\s*,\s*|\s+)((.*)(?:\s*,\s*|\s+)((.*)(?:\s*,\s*|\s+)((.*)(?:\s*,\s*|\s+)((.*))?)?)?)?)?` `\1=(2,${OP},0) \2=(2,${VAR},#00ff00) \4=(2,${OP},#ff0000) \6=(2,${VAR},#0000ff) \8=(2,${OP},#ff0000) \10=(2,${VAR},#00ff00) \12=(2,${OP},#0000ff)`

в многострочных комментариях winget, как и должно быть, - не окрашивается этим правилом как команда.

Если кто-то может - пожалуйста, подправьте правило под новый парсер и с учётом вышеописанных двух замечаний.


Last edited by Drugmix on Tue Oct 15, 2013 10:42 am; edited 1 time in total
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5325

PostPosted: Tue Oct 15, 2013 6:39 am    Post subject: Reply with quote

yozhic
Тестовая версия
Back to top
View user's profile Send private message Send e-mail
yozhic



Joined: 20 Jun 2011
Posts: 48
Location: Электросталь

PostPosted: Tue Oct 15, 2013 7:27 am    Post subject: Reply with quote

Instructor
Теперь всё отлично, спасибо.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5325

PostPosted: Sun Oct 20, 2013 1:39 pm    Post subject: Reply with quote

Drugmix
Веселое правило получается Smile
Code:
0   `^\s*(WinGet)(?:\s*,\s*|\s+)([^\s;]*)(\s*,\s*([^\s;]*)(\s*,\s*([^\s;]*)(\s*,\s*([^\s;]*)(\s*,\s*([^\s;]*)(\s*,\s*([^\s;]*))?)?)?)?)?` `\1=(2,${OP},0) \2=(2,${VAR},#00ff00) \4=(2,${OP},#ff0000) \6=(2,${VAR},#0000ff) \8=(2,${OP},#ff0000) \10=(2,${VAR},#00ff00) \12=(2,${OP},#0000ff)`
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page Previous  1, 2, 3, 4 ... 15, 16, 17  Next
Page 3 of 17

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group