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

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

1. Nikanr - 04 Января, 2020 - 07:36:43 - перейти к сообщению
Имеется строка следующего типа: [bf1][][bf2bf2]

Нужно записать bf1 и bf2bf2 в скобках так, что бы они оказались в ячейках массива string следующим образом:

CODE:
a[0]="bf1";
a[1]="";
a[2]="bf2bf2";


Пробовал такую регулярку:

CODE:
regexsearch(sizearray(a), #a[0], t, "(?<=\[).*?(?=\])");


Почему-то ищет только все то, что до пустоты в скобках.
2. Zireael - 04 Января, 2020 - 08:04:39 - перейти к сообщению
Искать текст вместе со скобками, а потом их удалять.
CODE:
string t="[bf1][][bf2bf2]";
string a[3];

regexsearch(sizearray(a), #a[0], t, "\[.*?\]"); // текст в квадратных скобках
for(int i=0; i<sizearray(a); i++)regexreplace(-1, #a[i], a[i], "\[|\]", ""); // удалить скобки

messagebox(a[0]);
messagebox(a[1]);
messagebox(a[2]);
3. Nikanr - 18 Февраля, 2020 - 11:57:16 - перейти к сообщению
Имеется строка rb и массив str в который нам нужно поместить soloveyodin в первую ячейку и golybdva во вторую. Проблема в том что слова solovey и golyb могут меняться по длине и содержанию. Слова odin и dva остаются такими какие они есть и всегда следуют после условных соловья/голубя. Единственное что еще может поменяться это порядок (например soloveyodingolybdva вместо golybdvasoloveyodin). В строку так же могут попадать либо только golybdva либо только soloveyodin и поместить их так же нужно либо в ячейку массива 1(soloveyodin) или в ячейку массива 2(golybdva). Можно как-нибудь решить это одной-двумя регулярками? В голову ничего не лезет кроме кода который привел ниже: (за исключением единичного вхождения соловья/голубя)

CODE:
string rb="(golybdvasoloveyodin)", str[2];


if(regexsearch(1, #str[0], rb, "dva\)")){ //обнаружено слово dva

regexsearch(1, #str[0], rb, "(?<=\()[a-z]*?odin");

regexsearch(1, #str[1], rb, "(?<=odin)[a-z]*?dva");

}
else{

regexsearch(1, #str[1], rb, "(?<=\()[a-z]*?dva");

regexsearch(1, #str[0], rb, "(?<=dva)[a-z]*?odin");

}

messagebox(str[0]+" "+str[1]);


P:S не создавал новую тему что бы не засорять форум
4. Zireael - 18 Февраля, 2020 - 17:32:43 - перейти к сообщению
CODE:
string rb="(golybdvasoloveyodin)", str[2];

find(rb);
messagebox("str0: "+str[0]+formatic(13)+formatic(10)+"str1: "+str[1]);



function find(string s)
{
string temp;
regexreplace(-1, #temp, s, "[\(\)]", ""); // удалить скобки
if(regexsearch(2, #str[0], temp, ".+?(odin|dva)")) // поиск
{
if(regexsearch(1, #temp, str[0], "dva")){temp=str[0]; str[0]=str[1]; str[1]=temp}; // меняем местами если dva в str[0]
}
}

Powered by ExBB FM 1.0 Final