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 ... 13, 14, 15 ... 20, 21, 22  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Skif_off



Joined: 20 Oct 2013
Posts: 385

PostPosted: Sat Jan 25, 2014 9:47 am    Post subject: Reply with quote

YuS wrote:
Ну, это уже не вопрос функционала поиска по условию, а в правильном составлении регэкспа

Согласен, только я в этом плохо разбираюсь, поэтому обратил ваше внимание Smile
1 - пример корректной работы правила, 2-3 - нет.
Back to top
View user's profile Send private message
YuS



Joined: 15 Sep 2013
Posts: 128

PostPosted: Sat Jan 25, 2014 10:51 am    Post subject: Reply with quote

Skif_off wrote:

Согласен, только я в этом плохо разбираюсь, поэтому обратил ваше внимание Smile
1 - пример корректной работы правила, 2-3 - нет.

Ок, понятно. Если вдруг, кому-нибудь нужно:
Вот такое правило:
Code:
^(?([^\n]{15,})([^.\n]{1,8})[^\n]*?(?([^.\n]+$)[^\n]+|(\.[^.\n]{0,4}))[^.\n]*?$)

Замена: \1..\2
будет обрезать имя и расширение файла при последовательных условиях:
1. Сумма символов имени и расширения - 15 и более
2. Имя файла будет обрезано до первой точки в имени, при условии наличия точки до восьмого символа имени, или если имя длиннее 8 символов и без точки, то оно будет обрезано до 8 символов.
3. Расширение файла будет обрезано, если оно длиннее 4 символов, причем обрезанная часть расширения точками замещаться не будет

Тест


Исходный текст:
Code:
12345678.abc
abc.12345678
123456789012
1234567890123
abc.123456789
abc.1234567890
12345678901234

abc.12345678901
abc.123456789012
abc.1234567890123
abc.12345678901234567890
abc.1234567890.1234567890
2.123456789012345678901.ab
3.1234567890123456789012.ab
4.12345678901234567890123.ab
5.123456789012345678901234.ab
6.1234567890123456789012345.ab
7.12345678901234567890123456.ab
8.123456789012345678901234567890.ab
9.123456789012345678901234567890.1234567890123456.7890.ab
0.123456789012345678901234567890.12345678901.234567890....abcdef012345
  12345678901234567890123456789012345678901234567890
12345678901.abc
12345678901.abc
123456789012.abc
1234567890123.abc
12345678901234.abc
123456789012.abcdefgh
1234567890123.abcdefgh
12345678901234.abcdefgh


Результат:
Code:
12345678.abc
abc.12345678
123456789012
1234567890123
abc.123456789
abc.1234567890
12345678901234

abc...1234
abc...1234
abc...1234
abc...1234
abc...1234
2...ab
3...ab
4...ab
5...ab
6...ab
7...ab
8...ab
9...ab
0...abcd
  123456..
12345678...abc
12345678...abc
12345678...abc
12345678...abc
12345678...abc
12345678...abcd
12345678...abcd
12345678...abcd
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Mon Feb 03, 2014 9:44 pm    Post subject: Reply with quote

EDIT: я во всём разобрался, группы с условиями ничего не поломали.

Last edited by Drugmix on Tue Feb 04, 2014 2:24 am; edited 1 time in total
Back to top
View user's profile Send private message
opk44



Joined: 16 Jan 2010
Posts: 348

PostPosted: Mon Feb 03, 2014 10:36 pm    Post subject: Reply with quote

Drugmix
светить нужно только слово "Windows"?
1. Можно лепить проверку на конец строки каждому проверяемому варианту:
Code:
0   "^(Windows\s+(?=95$|98$|NT$|2000$))"   "\1=(4,${IF},0)"
2. Но почему бы просто не сохранить шаблон?
Code:
0   "^(Windows\s+)(95|98|NT|2000)$"   "\1=(4,${IF},0)"
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Mon Feb 03, 2014 11:31 pm    Post subject: Reply with quote

opk44, это лишь пример из хэлп-файла акелпада.
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Mon Feb 03, 2014 11:32 pm    Post subject: Reply with quote

opk44
наверно, уместней продолжить обсуждение в другой теме, я туда ответ написал.
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Wed Feb 05, 2014 11:22 pm    Post subject: Reply with quote

Я тут закончил писать правила для QuotesRE: для подсветки синтаксиса AutoHotkey и пришло время оптимизаций.

Cкажите, что быстрее:
Code:
(IfWinActive|IfWinNotActive|IfWinExist|IfWinNotExist)
или
(IfWin(?:Not)(?:Active|Exist))

?
Back to top
View user's profile Send private message
YuS



Joined: 15 Sep 2013
Posts: 128

PostPosted: Thu Feb 06, 2014 6:11 am    Post subject: Reply with quote

Drugmix wrote:
Cкажите, что быстрее:
Code:
(IfWinActive|IfWinNotActive|IfWinExist|IfWinNotExist)
или
(IfWin(?:Not)(?:Active|Exist))

?


Code:
IfWin(?:Not)?(?>Active|Exist)
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 272

PostPosted: Thu Feb 06, 2014 8:08 am    Post subject: Reply with quote

YuS wrote:
... (?> ...
?
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Fri Feb 07, 2014 2:49 pm    Post subject: Reply with quote

Гм, занимательно:
Code:
"^\s*(?:\}\s*)*?(?:(Else)(?:\s*,\s*|\s+|\s*\{\s*)|(.+(?=::))::)?(?:(Try)(?:\s*,\s*|\s+|\s*\{\s*))?\s*(DriveGet)(?:\s*,\s*|\s+)(([^;,\s]|(?<=`),|(?<!\s);|\s(?!\s*?(?:;|$)))+?)(?:\s*,\s*)(List|Cap|Capacity|FS|FileSystem|Label|Serial|Type|Status|StatusCD)(?:\s*,\s*(([^;,\s]|(?<=`),|(?<!\s);|\s(?!\s*?(?:;)))*?)?)?\s*?((?<=\s);.*)?$" "\1=(4,${IF},0) \2=(4,${STR},0) \3=(2,${OP},0) \4=(0,${OP},0) \6=(0,${VAR},0) \7=(0,${TYPE},0) \9=(0,${TYPE},0) \10=(3,${COMM},0)"

Не срабатывает на
Code:
DriveGet, OutputVar, StatusCD, Value
DriveGet, OutputVar, Capacity, Value


А
Code:
"^\s*(?:\}\s*)*?(?:(Else)(?:\s*,\s*|\s+|\s*\{\s*)|(.+(?=::))::)?(?:(Try)(?:\s*,\s*|\s+|\s*\{\s*))?\s*(DriveGet)(?:\s*,\s*|\s+)(([^;,\s]|(?<=`),|(?<!\s);|\s(?!\s*?(?:;|$)))+?)(?:\s*,\s*)(List|Capacity|Cap|FS|FileSystem|Label|Serial|Type|StatusCD|Status)(?:\s*,\s*(([^;,\s]|(?<=`),|(?<!\s);|\s(?!\s*?(?:;)))*?)?)?\s*?((?<=\s);.*)?$" "\1=(4,${IF},0) \2=(4,${STR},0) \3=(2,${OP},0) \4=(0,${OP},0) \6=(0,${VAR},0) \7=(0,${TYPE},0) \9=(0,${TYPE},0) \10=(3,${COMM},0)"

срабатывает ок. Разница лишь в последовательности аргументов оператора ИЛИ.[/code]
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 272

PostPosted: Fri Feb 07, 2014 7:53 pm    Post subject: Reply with quote

Drugmix
Ага. Это не только в регулярках. Общее правило: если один шаблон является огрызком (в конце, начало такое же) другого, самый короткий пишем в конце, чтобы сперва проверялись длинные совпадения.
Back to top
View user's profile Send private message
YuS



Joined: 15 Sep 2013
Posts: 128

PostPosted: Sat Feb 08, 2014 8:16 am    Post subject: Reply with quote

Serge Yolkin wrote:
YuS wrote:
... (?> ...
?

А, ну да, в AP это не описано и скорее всего, не работает...
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Sat Feb 08, 2014 12:40 pm    Post subject: Reply with quote

YuS
теперь работает, просто оно лишнее там.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 272

PostPosted: Sat Feb 08, 2014 5:55 pm    Post subject: Reply with quote

Набираю в диалоге поиска (с регулярными выражениями)
Quote:
content(?>editable)
получаю сообщение "Синтаксическая ошибка"
?
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Sat Feb 08, 2014 6:32 pm    Post subject: Reply with quote

Serge Yolkin
и правильно. Синтаксис-то иначе задан:
Code:
content(?=editable)
Back to top
View user's profile Send private message
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 ... 13, 14, 15 ... 20, 21, 22  Next
Page 14 of 22

 
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