Регулярные выражения
- Author
- Message
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Вы сформулируйте полностью задачу, тогда и решать её будем, а так... вопрос был по другому поводу, на него и был дан ответ.)Skif_off wrote: Тогда не захватится \xxx@x
А попадалось ли Вам выражение для разбора е-майлов?Serge Yolkin wrote:Не удержался
Примерно такое
Last edited by YuS on Tue Dec 03, 2013 4:45 pm, edited 1 time in total.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Просто решил написать, почему не подходят предложенные варианты, а не обойтись только благодарностью за поясненияYuS wrote:Вы сформулируйте полностью задачу, тогда и решать её будем, а так... вопрос был по другому поводу, на него и был дан ответ.)
Добавлено:
В параллельной теме Xephon предложил такое
Code: Select all
\\(?=[a-z@]{3,})[a-z]*@[a-z]*
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Говорю же, необходимо полное условие, т.е. ссылку туда сразу надо было дать.)Skif_off wrote: В параллельной теме Xephon предложил такоевыражение, кажется, это можно считать вариантом решения.Code: Select all
\\(?=[a-z@]{3,})[a-z]*@[a-z]*
Если я правильно понял, то из следующих строк:
\@
\@x
\x@x
\@x
\x@
Необходимо найти минимальное сочетание обязательных символов и хотя бы одной буквы. Символы "" и "@" - обязательны, а остальные могут отсутствовать. Так? Если да, то:
Наверное, без поиска по условию тут не обойтись:
Code: Select all
\\[a-z]*@(?(?<=[a-z]@)[a-z]*$|[a-z]+$)
Возможно, что регулярные джедаи смогут и без него обойтись, но я не из таких, увы.
ЗЫ К сожалению, в Акелпадовских регулярках это пока не реализовано...
Добавлено:
ЗЗЫ Кстати, да, предложенный вариант джедаем Xephon, как раз таки работает, правда только вот в таком виде:
Code: Select all
\\(?=[a-z@]{2,})[a-z]*@[a-z]*
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
Помогите улучшить правило для coder.coder:
это правило в принципе работает:
но если в правиле (для которого пишется это правило) BackRef'ов больше одного, то окрашивается не так, как хотелось бы:
я понимаю почему так происходит (потому что шаблон составлен именно так, lol), но не понимаю как это исправить.
По идее, должно бы работать что-то вроде
или
но одна из групп (.*) становится овержадной, а если им всем трём добавить по ? в конец - то правило перестаёт работать совсем.
Code: Select all
0 "^\s*(\d+)\s*`(.*)`\s*`\s*\\(\d*)=\((.*),(.*),(.*)\)\s*`\s*$" "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"
но если в правиле (для которого пишется это правило) BackRef'ов больше одного, то окрашивается не так, как хотелось бы:
я понимаю почему так происходит (потому что шаблон составлен именно так, lol), но не понимаю как это исправить.
По идее, должно бы работать что-то вроде
Code: Select all
0 "^\s*(\d+)\s*`(.*)`\s*`(\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`\s*$" "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \4=(2,#0000ff,0) \5=(0,#ff0000,0) \6=(0,#00ff00,0) \7=(2,#0000ff,0)"
Code: Select all
0 "^\s*(\d+)\s*`(.*)`\s*`(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`\s*$" "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"
-
Offline
- Posts: 269
- Joined: Mon Jun 20, 2011 8:33 am
- Location: Электросталь
-
Offline
- Posts: 294
- Joined: Tue Jul 27, 2010 11:18 pm
Господа, а не подскажет ли кто, как записать "НЕ_обратная_ссылка"?
Выражение видав целом работает, но не всегда так, как хотелось бы. А как, вместо ".*", написать"всё, что угодно, кроме \1"?
Выражение вида
Code: Select all
(['"]).*\1\s*$
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
YuS
Не подойдет при вложенности: "1'x'3"
Serge Yolkin
В тестовой версии можно так:
Не подойдет при вложенности: "1'x'3"
Serge Yolkin
В тестовой версии можно так:
Code: Select all
(['"])[^\1]*
Code: Select all
(['"])(?^\1)*
-
Offline
- Posts: 294
- Joined: Tue Jul 27, 2010 11:18 pm
YuS
Спасибо, но не то: нужна именно обратная ссылка, т.е., если отловлена одинарная кавычка, то двойная допускается, всё, кроме одинарной, и наоборот.
Instructor
В не тестовой вот такая конструкция работает:А с тестовой ещё поиграюсь.
Спасибо, но не то: нужна именно обратная ссылка, т.е., если отловлена одинарная кавычка, то двойная допускается, всё, кроме одинарной, и наоборот.
Instructor
В не тестовой вот такая конструкция работает:
Code: Select all
`\s(['"\u0060]?)(((?!\1).)+)(\1)\s*$` `\1=... \2=... \4=...`
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Это да... поэтому сначала так и написал:Instructor wrote:YuS
Не подойдет при вложенности: "1'x'3"
Code: Select all
(['"])[^\1]*\1
Про тестовую версию теперь знаю, что там уже работает.
Кстати, на regex101.com в конструкции [^\1], обратная ссылка почему-то интерпретируется как символ с восьмеричным индексом... ещё и это вызвало сомнение, в том, что это, возможно, неправильная запись регулярки. Ведь в наборах символов, сами метасимволы и обратные ссылки могут интерпретироваться совсем по-другому...
-
Offline
- Posts: 366
- Joined: Mon Jan 10, 2011 5:28 pm
- Contact:
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64