Границы слова при работе с кириллицей

Программирование на Active Server Pages и VBScript.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Границы слова при работе с кириллицей

Сообщение ger_kar » 22.11.2011 (Вт) 19:56

В VBS есть замечательный компонент для работы с регулярными выражениями - Microsoft VBScript Regular Expressions 5.5
И если обрабатывать слова написанные латиницей, то границы слов \b он обрабатывает корректно, но если слово написано кириллицей, то граница слова уже не срабатывает и например регулярное выражение \bРусский\b слово Русский уже не воспринимает.
Наверное те, кто изобретал сие творение совсем забыл, что слова бывают не только на английском (латинице). Но с другой стороны охота использовать этот объект и при работе с кириллицей, и другие видимо работают и без особых проблем, но я никак не могу сообразить, как найти замену мнимому символу границы слова \b, чтобы выделять слова написанные кириллицей. Причем если для проверки вхождения подстроки еще худо-бедно можно использовать конструкцию \s[А-Яa-я](\s|\.|,|$) , то для замены подстроки она совершенно не подходит ибо обрамляющие слово пробелы и знаки препинания "съедаются".

Так какую конструкцию можно использовать для кириллицы, а еще лучше универсальную (хотя она и так получится универсальной :) )?
Бороться и искать, найти и перепрятать

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Границы слова при работе с кириллицей

Сообщение Antonariy » 25.11.2011 (Пт) 12:19

\w :?:
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Границы слова при работе с кириллицей

Сообщение ger_kar » 25.11.2011 (Пт) 15:27

К сожалению \w это тоже мнимый символ, который не воспринимает кириллицу :?
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Границы слова при работе с кириллицей

Сообщение ger_kar » 28.11.2011 (Пн) 13:39

Да, просто шквал ответов ;)
Неужели никто не обрабатывал кириллический текст с помощью регулярных выражений?

Например: "В этом предложении необходимо заменить это слово"
Меняем слово "это" например на слово "такое".
Если сделать простую репликацию, то она заменит набор символов это, везде где только можно, и из предыдущего предложения получится:
такоем предложении необходимо заменить такое слово". Но нужно было поменять только слово целиком. Если такое необходимо проделать в предложении с латинским алфавитом, то проблем не возникает, достаточно применить мнимый символ границы слова \b, а вот с кириллицей траблы. Можно конечно городить огород и решить эту проблему вообще без использования регулярных выражений, но мне охота сделать с регулярными :)
Бороться и искать, найти и перепрятать

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Границы слова при работе с кириллицей

Сообщение FireFenix » 28.11.2011 (Пн) 17:47

Проверь кодировку текста. Обычно такое бывает с юникодом.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Границы слова при работе с кириллицей

Сообщение ger_kar » 28.11.2011 (Пн) 18:57

Так все остальное прекрасно работает. Не работают только \w \b, может конечно и еще что-то не работает, но я пока выявил только эти.
А что касается кодировки, то я собственно пытаюсь обрабатывать авто макрокод модулей VBA
Типа такого:
Код: Выделить всё
Sub Полеввода5_Изменение()

End Sub
Sub ТП1_Изменение()

End Sub
Sub Раскрсписок11_Изменение()

End Sub
Sub Кнопка2_Щелкнуть()

End Sub
Бороться и искать, найти и перепрятать

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Границы слова при работе с кириллицей

Сообщение FireFenix » 28.11.2011 (Пн) 20:30

А что касается кодировки, то я собственно пытаюсь обрабатывать авто макрокод модулей VBA

Какая связь между типом кодировки и тем, что ты обрабатываешь? Ты знаешь в какой кодировке у тебя входные данные и сама ругулярка?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Границы слова при работе с кириллицей

Сообщение ger_kar » 28.11.2011 (Пн) 21:07

FireFenix писал(а):Какая связь между типом кодировки и тем, что ты обрабатываешь?
Самая непосредственная, я получаю обрабатываемый текст при помощи метода
VBE.CodePanes(n).CodePane.CodeModule.Lines(StartLine As Long, Count As Long) As String, а в какой кодировке этот метод возвращает текст я не в курсе и как это проверить тоже не знаю, но скорее всего если VB/VBA хранит строки в юникоде, то стало быть и возвращает тоже юникод. При обращениях к API идет преобразование, но тут API даже близко нет.
Но как бы там ни было, если просто сделать замену с регулярным выражением "Слово", то все работает, а если добавить границы 2 или 1 то "\bСлово\b" уже не воспринимается. Я конечно попробую поэксперементировать с форматом, а там видно будет.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Границы слова при работе с кириллицей

Сообщение ger_kar » 08.12.2011 (Чт) 10:54

Кому нибудь встречалась полная документация (на крайний случай хоть на английском) с описанием все конструкций регулярных выражений поддерживаемых Microsoft VBScript Regular Expressions 5.5? Поделитесь ссылочкой :)
На MSDN http://msdn.microsoft.com/en-us/library/ms974570.aspx справка куцая, например конструкций
(?=Шаблон) и (?!Шаблон)даже близко нет, хотя они распознаются.
Ориентируюсь по справке перла, но многие конструкции (например группировка (?Шаблон) (?#Комментарий) ) не воспринимаются. Например очень удобная конструкция (?<Шаблон) в Microsoft VBScript Regular Expressions 5.5 не работает. Может ее здесь как то по другому писать нужно. Ну и другие нюансы. Хотелось бы почитать документэйшин, и иметь твердое знание, чем выяснять все методом проб и ошибок по ходу дела.
Бороться и искать, найти и перепрятать

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Границы слова при работе с кириллицей

Сообщение FireFenix » 08.12.2011 (Чт) 11:18

Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Границы слова при работе с кириллицей

Сообщение ger_kar » 08.12.2011 (Чт) 20:09

Ну это опять общая информация, хотя конечно большая ее часть и применима к VBScript Regular Expressions 5.5, все таки хотелось бы почитать про синтаксис и возможности именно VBScript Regular Expressions 5.5. Хотя и эта информация оказалась для меня полезной. Оказалось, что например группировка (?:Шаблон) все таки поддерживается, но в отличии от того справочника, которым пользовался я записывается не (?Шаблон), а (?:Шаблон). За информацию спасибо. Вполне может быть, что и (?<=шаблон) (?<!шаблон)поддерживаются, но пишутся как то по другому, потому, что использование этих конструкций в таком варианте вызывают ошибку.
Бороться и искать, найти и перепрятать

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Границы слова при работе с кириллицей

Сообщение FireFenix » 08.12.2011 (Чт) 20:12

думаю стоит и здесь посмотреть http://msdn.microsoft.com/en-us/library ... 71%29.aspx
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList