Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Автоматическое экранирование символов при поиске

Страниц (1): [1]
 

1. phpmax - 18 Февраля, 2020 - 13:21:43 - перейти к сообщению
Добрый вечер. Подскажите пожалуйста, какой функцией обернуть строку поиска, чтобы все особенные символы автоматически были экранированы?

CODE:

string P[10];
string T="привет (привет)";

string R= "привет (п"; //Не находит
string R= "привет "; //Находит
int k=regexsearch(-1, #P[0], T, R);

messagebox(format(k));


Я понимаю, что проблема решается добавлением обратного слеша, но строка динамическая, надо бы автоматом это сделать, потому что еще реагирует на сами слеши, если есть в тексте, на квадратные скобки и т.д.

P.S. мне не обязательно видеть сколько результатов найдено, сами результаты и т.д., важно знать, есть фрагмент в тексте или нет, возможно использование более простой функции поиска, без регулярных выражений
2. Nikanr - 18 Февраля, 2020 - 13:51:44 - перейти к сообщению
Если текст считывается с помощью readtext, можно просто обучить базу на другой символ при обнаружении "(". Но в остальном - сомневаюсь что есть вариант автоэкранирования без какого-нибудь изощренного костыля)
3. phpmax - 18 Февраля, 2020 - 13:55:59 - перейти к сообщению
 Nikanr пишет:
Если текст считывается с помощью readtext, можно просто обучить базу на другой символ при обнаружении "(". Но в остальном - сомневаюсь что есть вариант автоэкранирования без какого-нибудь изощренного костыля)

во многих языках программирования есть такая функция, думаю и тут должна быть. даже если ее нет, то написать можно, для профи это дело двух минут, да и уверен готовая может быть, ждем гуру)
(Добавление)
пока сделал так, но буду благодарен за более правильный вариант

CODE:
regexreplace(-1, #R, R, "[\(]", "\(");
regexreplace(-1, #R, R, "[\[]", "\[");
regexreplace(-1, #R, R, "[\.]", "\.");

(Добавление)
CODE:
regexreplace(-1, #R, R, "[\.]", "\.");

лишнее
4. Zireael - 18 Февраля, 2020 - 16:41:51 - перейти к сообщению
CODE:
string T="привет (привет)"; // строка
string R= "привет (п"; // что искать

if(find(T, R)) // вызов функции поиска
{
// нужные действия
messagebox("Текст найден");
}
else messagebox("Текст не найден");



function find(string s, string regex)
{
string P;
// экранирование символов ()?!
regexreplace(-1, #regex, regex, "([\(\)\?\!])", "\$1"); // добавить нужные символы в квадратные скобки через \

if(regexsearch(1, #P, s, regex))return 1; // если найдено функция вернёт 1
return 0; // иначе 0
}
5. phpmax - 19 Февраля, 2020 - 02:06:58 - перейти к сообщению
спасибо!

Powered by ExBB FM 1.0 Final