Kibor |
Отправлено: 27 Марта, 2018 - 10:26:16
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Выкладываю на альфа тест регулярные выражения.
Пока только тест на баги. Функции не закончены.
Для вызова функции поиска в строке необходимо вызвать
findtexttest
Функция не подсвечивается.
Краткое описание.
Доступны константы:
CODE:// NUM | RU | EN | MARK | SPEC | ALL | SPACE
Команды:
CODE:/\ выделенное этими знаками будет отображаться в поиске.
По умолчанию границы - начало и конец найденного фрагмента.
Можно установить одну из меток. В таком случае будет отображаться от начала до метки или от метки до конца.
В последствие можно будеьт указывать несколько зон и они будут писаться в массив.
^ Знак исключения.
То есть ^NUM означает что любая цифра будет ошибкой.
^"абвгд"
Ставится перед словом. Не применяется к группе.
* Означает что символы в слове расматриваются как массив отдельных символов, а не как слово
*"аврора" означает что достаточно совпадения одной из букв этого слова
"аврора" необходимо точное вхождение всего слова
Для констант данный режим идет автоматически и не меняется.
! Означает что искомая фраза не может закончиться этим знаком даже если он присутствовал в середине слова.
milo@dom.hata.com.
"."!
Отсеет последнюю точку
[] групирует слова символы. Для истины достаточно совпадения одного из
[EN, NUM, *"-_"]
+ или число. Сколько необходимо совпавших символов или не известно.
Несколько примеров:
CODE:
string CTEXT="мыло первое:test_1@domen1tochka.com.Мыло@vtoroe второе:test_2@domen.mnogo.tochek.com."
+"мыло третье с ошибкой. Без зоны домена: test_3@error.финиш. Точки после мыла отсеются";
string t="-_!#$%&'*+/=?^`{|}~";//Эти знаки допускаются в мыле
string PR;//сюда пишет ответ
while (findtexttest (#CTEXT, #PR, [EN, NUM, *t]+, "@", [EN, NUM]+, ".", [EN, NUM, ".", "."!]+)==1)
{
messagebox ("!"+PR+"!");
}
string CTEXT="номер 52 телефона (097)-555 26 52 просто число 5 и число 78998434549 еще 097-555-26-52 и еще 097 555 26 52";
string t="-_!#$%&'*+/=?^`{|}~";//Эти знаки допускаются в мыле
string PR;//сюда пишет ответ
while (findtexttest (#CTEXT, #PR, ["(", NUM, ")"]+, [NUM, SPACE, "-", SPACE!]+)==1)
{
messagebox ("!"+PR+"!");
}
string CTEXT="текст этот внутри не покажет<>не покажет текст<>текст этот внутри покажет так"
+" как по 2 пары скобок по бокам<><>покажет текст<><>все";
string t="-_!#$%&'*+/=?^`{|}~";//Эти знаки допускаются в мыле
string PR;//сюда пишет ответ
while (findtexttest (#CTEXT, #PR, "<>"2, /ALL+\, "<>"2)==1)
{
messagebox ("!"+PR+"!");
}
string CTEXT="Найдет 2 мыла Васи. Вася имеет первое мыло Vasya@gmail.com. Петя имеет мыло petya@gmail.com. "
+"Вася имеет еще одно мыло Vaska-kot@gmail.com Точки после мыла отсеются. "
+"Вася еще имеет телефон 095 217 25. Но телефоне не мыло.";
string t="-_!#$%&'*+/=?^`{|}~";//Эти знаки допускаются в мыле
string PR;//сюда пишет ответ
while (findtexttest (#CTEXT, #PR, "Вася", ALL+, /[EN, NUM, *t]+, "@", [EN, NUM]+, ".", [EN, NUM, ".", "."!]\+)==1)
{
messagebox ("!"+PR+"!");
}
string CTEXT="Надо выбрать все телефоны без 2. Первый 097-555 76 51 Второй 097-555-26-52 Третий 027 525 26 52";
string t="-_!#$%&'*+/=?^`{|}~";//Эти знаки допускаются в мыле
string PR;//сюда пишет ответ
while (findtexttest (#CTEXT, #PR, [NUM, ^"2", SPACE, "-", SPACE!]11)==1)
{
messagebox ("!"+PR+"!");
}
|
|
|
Zireael |
Отправлено: 27 Марта, 2018 - 15:22:03
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Не лучше ли вынести обсуждение не законченной функции в отдельную тему? Кому оно надо читать потом о когда-то существовавших багах.
Потестил немного, в целом работает.
CODE:string CTEXT="qwe 123 rty";
string PR;
while (findtexttest (#CTEXT, #PR, ALL+\, [NUM]+)==1) // всё до числа
{
messagebox (PR); // Второе сообщение лишнее.
}
Может уже есть что-то в планах, но внесу несколько предложений.
Цитата: + или число. Сколько необходимо совпавших символов или не известно.
Добавить [NUM]2~5 или как-то так, т. е. число от 2 до 5 цифр или символов, в зависимости от синтаксиса.
Из-за того что * это 1 или больше (а не 0 или больше), как быть с ситуацией когда символ может как присутствовать, так и отсутствовать? Например: "123, Сумма: 456" и "123, Сумма:456". Найти число после "Сумма:", в одном случае есть пробел после "Сумма:", в другом нет.
Может добавить: ?"аврора" или ?SPACE. Т. е. 0 или больше. Получится "Сумма:", ?SPACE, /[NUM]+\
Планируется ли добавить символы начала и конца строки, границы слова? |
|
|
|