Регулярные выражения

Russian main discussion
  • Author
  • Message
Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

ЕМНИП, \w означает "любая ЛАТИНСКАЯ буква", а чтобы и русские искались, замените на [a-zA-Zа-яА-ЯёЁ]
Шел на дворе 21 век, а Вы продолжаете пользоваться концепциями 16-го?

eil
Offline
Posts: 40
Joined: Sun Nov 15, 2009 5:53 pm
Location: Alex

Post by eil »

Serge Yolkin,
извините за глупый вопрос, но и где это заменить? это каждый раз в выражение вставлять все?!. дайте пример на основе моего выражения, пожалуйста.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

eil
Если вам нужны слова с цифрами и подчеркиванием, то можно так
\b[\wЁА-ё]{5,6}\b
можно без \b, тогда лишь первый результат может быть неправильным если курсор поначалу стоит на середине слова.
Если проследите за галками("слово целиком" включено и "учитывать регистр" выключено), можно так:
[\wа-ё]{5,6}
Если не нужны цифры и подчеркивание и галки как надо:
[a-zа-ё]{5,6}

FeyFre
А как это сделать по современному?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Visitor7, собственно что сделать по современному?
\w итак означает символы входящие в состав слов, UniversalAlpha их иногда обзывают. Могу нарыть собственно списочек этих символов(стандарт)

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

FeyFre
А, ну это да. \w эквивалентно [\dA-Z_a-z], точнее [0-9A-Z_a-z].
С другой стороны, иногда удобней пользоваться [A-z], иногда [A-Za-z], иногда [a-z] с нечувствительностью регистра.

eil
Offline
Posts: 40
Joined: Sun Nov 15, 2009 5:53 pm
Location: Alex

Post by eil »

спасибо всем за ответы, и Visitor7 за примеры.
еще несколько вопроса:
- если \w эквивалентно [\dA-Z_a-z], точнее [0-9A-Z_a-z], то почему нет чегото подобного для эквивалента русскому алфавиту?(или вернее может юникоду)
- при поиске, скажем по \b[\wа-ё]{5,6}\b, выделяет только подходящее слово = а можно ли както чтобы выделило всю строку(от enter до enter), содержащую это слово?
- мало знаю о regex, но заметил что при англ диапазон a-z, почему в русс а-ё?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

А, ну это да. \w эквивалентно [\dA-Z_a-z], точнее [0-9A-Z_a-z].
И ещё один пользуется логикой 16 века? В стандарте явно прописано что такое слово и из каких "букв" оно состоит. И я Вам уверяю что не состоит только из a-zA-Z диапазонов.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

- мало знаю о regex, но заметил что при англ диапазон a-z, почему в русс а-ё?
Долго и тяжко объяснять. Есть такое понятие COLLATION (погуглите). Так вот, в Вашем примере используется чисельный collation в то время как Вы привыкли к алфавитному.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

FeyFre
Логика 16 века гарантированно отрабатывает везде. В том числе, в осях и программах 16 века. В этом её прелесть.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

eil wrote:Почему нет чегото подобного для эквивалента русскому алфавиту?
Потому что английский распиарен до статуса международного, а о других никто не заботится. И потому что в каждом языке свои наборы символов на своих местах и пришлось бы для каждого языка делать свой аналог \w.
eil wrote:а можно ли как-то чтобы выделило всю строку(от enter до enter)
а оно вам точно надо? тройной клик по слову или одинарный клик в поле перед началом строки вас не устраивает?
eil wrote:мало знаю о regex, но заметил что при англ диапазон a-z, почему в русс а-ё?
Тоже о regular expressions только недавно узнал на этом форуме)) Я просто открыл таблицу символов в акелпаде, Правка\Вставить символ, и посмотрел последовательности в разных шрифтах, попробовал на разных кодировках - одно и то же.
Латинские символы расположены в такой последовательности: что-то, A-Z, [\]^_`, a-z, что-то. Соответственно, [A-z] захватит латинский алфавит с символами [\]^_`. А [A-Za-z] - только латинские символы.
Русские символы расположены в такой последовательности: что-то, Ё, старорусские большие, А-Я, а-я, ё, старорусские маленькие, что-то.
Соответственно, [А-я] захватит весь новый алфавит кроме ёЁ (то же что [А-Яа-я]). [а-ё] захватит все маленькие буквы(а-я и ё). Чтобы захватить весь новорусский алфавит - [ЁА-Яа-яё] ровно [А-ёЁ] ровно [А-яёЁ] и т.п.
Так что, в принципе, для поиска можно пользоваться захватом всего русского алфавита [Ё-ө] или схалтурить для простоты [Ё-ё].

FeyFre
Не знаю, отсюда поподробней. Я лишь вот это видел:
Справочник JavaScript: \w эквивалентно [A-Za-z0-9_].
Справка Akelpad: \w эквивалентно '[A-Za-z0-9_]'.
Только латиница, цифры и подчеркивание.
Поиск COLLATION путного по русски не выдает, а гуглить по английски мне знания языка не хватает, прочитаю только если меня в конкретную статью носом ткнуть.

eil
Offline
Posts: 40
Joined: Sun Nov 15, 2009 5:53 pm
Location: Alex

Post by eil »

Visitor7, спасибо за разбяснения с наборми символов.
а оно вам точно надо? тройной клик по слову или одинарный клик в поле перед началом строки вас не устраивает?
это нужно для того, чтобы скажем профильтровать переписку из чата и удалить все строки определенного пользователя -тоесть нужна замена всей строки с определенным словом/ником на пустую строку.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

eil
Заменить:
Что: (^|\n)[^\n]*слово[^\n]*(\n|$)
Чем: \n
Смотрите в Akelpad Справка\Руководство\Синтаксис регулярных выражений.

Serge Yolkin
Точно, потерялся, спасибо.
Last edited by Visitor7 on Wed Aug 08, 2012 2:06 pm, edited 1 time in total.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Visitor7
слэш во вторых квадратных потерялся.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

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

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

FeyFre
Было б неплохо, мне она на запрос отвечает - "Создать страницу «COLLATION»".
Last edited by Visitor7 on Wed Aug 08, 2012 8:35 pm, edited 3 times in total.
Post Reply