RegExp не обрабатывает нормально UTF-8

1. moolex 908 22.11.16 21:49 Сейчас в теме
//Всем привет, вопрос про
RegExp = Новый ComObject("VBScript.RegExp");
//есть текст:
Стр = "всем привет , приветик большой";
//делаю:
RegExp.Pattern = "\bпривет\b";
Результат = RegExp.Replace(Стр, "hello");
Сообщить(Результат);

если исходный текст не содержал бы русских символов, то все прекрасно работает.
У меня вопрос - это косяк и забить на эти регулярные выражения или есть решение?
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. starik-2005 3039 22.11.16 22:14 Сейчас в теме
10. Nik_novosib 23.11.16 12:13 Сейчас в теме
(1) еще рекомендую для отладки использовать сайт https://regex101.com/
11. T-y 23.11.16 17:59 Сейчас в теме
(1) Если честно не очень понятно что ты вообще хочешь сделать, как сказали выше напиши первоначальную постановку задачи.
Можно например вот так попробовать.
//Всем привет, вопрос про 
RegExp = Новый ComObject("VBScript.RegExp");
RegExp.Global = Истина;
//есть текст: 
Стр = "всем привет , приветики всем";
Стр = СтрЗаменить(Стр,"привет","change");
//делаю: 
RegExp.Pattern = "\bchange "; 
Результат = RegExp.Replace(Стр, "hello");
Результат = СтрЗаменить(Результат,"change","привет");
Сообщить(Результат);
Показать
12. Sofokl 23.11.16 18:12 Сейчас в теме
(11) Простите, зачем здесь вообще RegExp'ы? )))
14. T-y 24.11.16 10:37 Сейчас в теме
(12) (13) Так в том то и дело, что изначально не понятно что автор темы хотел сделать, по его коду я понял только то что он хотел поменять "привет" на "hello" но не менять "приветики", об этом говорит отсутствие RegExp.Global = Истина, и мета символы /b в начале и в конце и это и в правду можно сделать без RegExp, но так как вопрос был про него то вот и ответ)
13. Sashares 34 23.11.16 18:13 Сейчас в теме
(11) А в чем тогда вообще смысл использования регулярных выражений в вашем примере, если это через СтрЗаменить можно реализовать?

Стр = "всем привет , приветики всем";
Стр = СтрЗаменить(Стр,"привет ","hello ");
Сообщить(Стр);
2. moolex 908 22.11.16 22:14 Сейчас в теме
Забыл написать - возвращает Результат без именений, т.е. не заменяет слово "привет" на "hello"...
4. starik-2005 3039 22.11.16 22:14 Сейчас в теме
(2) а, ну тогда не сработает...
5. starik-2005 3039 22.11.16 22:18 Сейчас в теме
(2) http://www.sql.ru/forum/820662/simvoly-nacionalnyh-alfavitov-v-regexp - тут есть про кириллические символы в регэкспе.
15. 6есик 52 24.11.16 12:34 Сейчас в теме
(2)
Забыл написать - возвращает Результат без именений, т.е. не заменяет слово "привет" на "hello"...


Попробуй заменить "\bпривет\b" на такую "привет(?= )", \b с кирилическими символами не работает.
6. moolex 908 23.11.16 07:30 Сейчас в теме
Как я понимаю, никто с этим не сталкивался?
7. teller 23.11.16 11:30 Сейчас в теме
(6) word boundary для кириллицы?

попробуй например
$RegExp.Pattern="([\s\.,:;]|^)(привет)(\s|\.|,|$)"
8. Sofokl 23.11.16 11:47 Сейчас в теме
(6) Или так, причем не важен язык искомого слова для кирилицы и латиныц одинаково отработает один шаблон
RegExp = Новый ComObject("VBScript.RegExp"); 
//есть текст: 
Стр = "всем привет , приветик большой"; 
//делаю: 
Слово = "привет";  //Патерн = "\u043F\u0440\u0438\u0432\u0435\u0442";
Патерн = "";

Для ш=0 По СтрДлина(Слово)-1 Цикл
	Патерн = ""+Патерн + "\u"+ to16(КодСимвола(Слово,ш+1));
КонецЦикла;

RegExp.Pattern = "\s"+Патерн+"\s";

Результат = RegExp.Replace(Стр,  " hello "); 
Сообщить(Результат); 
Показать

Функция to16(чсл)
	
Если 0 = чсл Тогда 
   	Возврат "0000"; 
КонецЕсли; 

результат = ""; 

	Пока 0 < чсл Цикл 
	   остаток = чсл % 16; 
	   Если 10 <= остаток Тогда 
	     результат = Символ(КодСимвола("A") + остаток - 10) + результат; 
	   Иначе                                       
	     результат = строка(остаток) + результат; 
	   КонецЕсли; 
	   чсл = цел(чсл / 16);     
	КонецЦикла;

	Пока СтрДлина(результат) < 4 Цикл
		Результат = "0"+Результат;
	КонецЦикла;

Возврат результат; 
	
КонецФункции

Показать
EvgeTrofi; +1 Ответить
9. Nik_novosib 23.11.16 12:10 Сейчас в теме
Вероятнее всего косяк Рег Эксп. Забивать на регулярку не стоит. Иногда без нее почти ни как. А если и можно и выкрутиться то крайне гем....но. Так что лучше по не много осваивать. Лучше кидай первоначальную постановку задачи: что из строки нужно вытащить по каким критериям, я к тому что можно обойтись и без "\b".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот