Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Ошибка в простой регулярке

25.11.2014, 15:00. Показов 866. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет Друзья.

Помогите найти ошибку. Уже не знаю что ещё сделать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Проверка по регулярным выражениям
bool __fastcall TForm1::bSearchRegExp(UnicodeString IP, UnicodeString RegularExp)
{
   std::auto_ptr<TRegExpr> Reg(new TRegExpr);
   Reg->InputString = IP;
   Reg->ModifierM = true;
   Reg->Expression = RegularExp;
   Reg->Compile();
   if(Reg->Exec(Reg->InputString)){ return true; }
   else return false;
}
//---------------------------------------------------
// Проверка по регулярным выражениям
void __fastcall TForm1::Button3Click(TObject *Sender)
{
   String PingInfo = "31.13.93.17";
   String EtalonIP = "^31\.13\.93\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$";
   if(bSearchRegExp(PingInfo, EtalonIP))
      Memo1-Lines->Add(String(L"Проверьте IP/DNS >> " + PingInfo);
}
Миниатюры
Ошибка в простой регулярке  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2014, 15:00
Ответы с готовыми решениями:

ошибка в регулярке
Здравствуйте! Есть некоторая неточность в моей регулярке. Суть такая - мне нужно из текста достать все строки вида: X, где X -...

Ошибка в регулярке
preg_match_all(&quot;\&lt;td\&gt;\&lt;div\ class\=\&quot;cell\-1\&quot;\&gt;\&lt;a\ href\=\&quot;\&quot;\&gt;(.*)\&lt;\/a\&gt;\&lt;\/div\&gt;&quot;,$data,$mch); Помогите найти ошибку, регулярное...

Интересная выдача (ошибка) в регулярке
Имеем скрипт: $H=getenv(&quot;HTTP_REFERER&quot;); preg_match(&quot;/{8}-{4}-{4}-{4}-{12}.{5}/&quot;, $H, $go); // var_dump($go); // выводим весь...

19
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,870
Записей в блоге: 12
25.11.2014, 16:26
Экранирование символов забыл.
C++
1
String EtalonIP = "^31\\.13\\.93\\.(:25[0-5]|2[0-4]\\d|[01]?\\d\\d)$";
попробуй...
1
25.11.2014, 16:58

Не по теме:

Раздел PHP вроде, и для php ошибок тут нет)

0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
26.11.2014, 02:41  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Экранирование символов забыл.
Ставил их, всё равно не срабатывало, видимо пару "?" лишние были или не там где надо.

А так уже всё работает, спасибо UI.

Цитата Сообщение от pav1uxa Посмотреть сообщение
Раздел PHP вроде, и для php ошибок тут нет)
Так регулярные выражения только в разделах РНР и JS.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
26.11.2014, 14:18  [ТС]
Вариант работает, но если не трудно поясните некоторые моменты. Почему в конструкторе регулярных выражений первоначальный код ищет строго айпи и правильно, а во втором(предложеном вами) показывает так - 31.13.93.17,17. Скрины ниже прилагаю.
Миниатюры
Ошибка в простой регулярке   Ошибка в простой регулярке  
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.11.2014, 16:03
UI, можете, пожалуйста, пояснить:
Code
(:шаблон)
это аналог
Code
(?:шаблон)
?

Maestro, попробуй эту: http://regexponline.com/

Добавлено через 52 минуты
Если написать вот так:
C++
1
String EtalonIP = "^31\\.13\\.93\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)?$";
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
26.11.2014, 16:06  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
попробуй эту: http://regexponline.com/
Да результат как и конструкторе с 5-го сообщения, с "?:" работает выдавая строго 31.13.93.17, без "?" - 31.13.93.17,17 .

А в программе, первоначальный вариант, который на обоих проверочных сайтах по регуляркам проходит нормально, выдаёт ошибку приведённую на скрине. Ошибка на этапе проверки, компиляция проекта проходит успешно.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.11.2014, 16:10
Тогда вот такой вариант отрабатывает в конструкторе верно:

C++
1
String EtalonIP = "^31\\.13\\.93\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$";
А что за библиотеку ты используешь? Не PCRE, случайно ?
Или это встроенная?
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,870
Записей в блоге: 12
26.11.2014, 16:34
Цитата Сообщение от Dragokas Посмотреть сообщение
Тогда вот такой вариант отрабатывает в конструкторе верно:
Не отрабатывает. Будет ошибка, используемая библиотека не понимает подобной конструкции
Цитата Сообщение от Dragokas Посмотреть сообщение
А что за библиотеку ты используешь?
Это Дельфийский TRegExpr, подцепленный к Билдеру
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
26.11.2014, 18:36  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Это Дельфийский TRegExpr, подцепленный к Билдеру
Да, именно её.

А какой же тогда выход?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.11.2014, 21:45
Maestro, можешь скинуть тестовый проект с подключенной либой? Хочу потренироваться на кошках.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
27.11.2014, 01:59  [ТС]
Dragokas, Могу, но завтра, только прочитал сообщение. regexpr - файл тестовый - TestRExp.exe в принципе на одной либе что мой проект что пример в архиве.

UI, я тут подумал, а может есть другой вариант написания регулярки проверяющей диапазон IP? Можете помочь написать регулярку проверяющая диапазон от 31.13.93.0 - 31.13.93.255? Всё что вне диапазона - ложь.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.11.2014, 02:20
Кажется, понял.
Запятая, которая светится в результатах - это имеется в виду не одна строка с результатом,
а разделение так называемых SubMatches.
Т.е. по идее у тебя на выходе должен получится массив, где первым элементом будет искомый адрес,
а вторым совокупность найденного в группировках "(шаблон)".

Доступ к каждой из найденных подстрок можно получить через:
Delphi
1
2
3
       for i := 0 to r.SubExprMatchCount do begin
          // r.MatchPos [i]
       end;
Но тебе для того, чтобы просто проверить успех поиска по шаблону достаточно только смотреть это число: r.SubExprMatchCount
1
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
01.12.2014, 22:53
Цитата Сообщение от Dragokas Посмотреть сообщение
это аналог
Не совсем. Использование (?:шаблон) не запоминает найденное соответсвие шаблону как это делают (шаблон)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
02.12.2014, 00:14
FraidZZ, можешь пояснить, какие плюсы я могу получить в случае когда "запоминает"
и привести пример ?
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
02.12.2014, 00:28
Dragokas, ну смотри.
Каждой паре таких скобок регулярки как бы присваивается номер и запоминается само вхождение в строке, которое потом можно использовать по номеру.

Code
1
(abc.)\1
Здесь \1 - это как раз уже найденная строка, соответствующая шаблону (abc.)
Таким образом, мы найдём только строки abc?abc?, где выделенный жирным символ обязательно одинаков в обоих вхождениях.

Так вот, использование (?:шаблон) такую обратную связь не создаёт и к ней нельзя обратиться из регулярки, это полезно, если необходимо не перегружать её такими пронумерованными найденными подстроками.

И ещё, стоит помнить, что эти самые подстроки можно использовать при замене.
JavaScript
1
var foo = "asfxasfg".replace(/asf(.)/g, "$1$1$1$1"); // => xxxxgggg
Добавлено через 47 секунд
Прости за сумбур, не спал уже один Люцифер знает сколько, мысли путаются и липнут к сводам черепа.
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
02.12.2014, 00:44
Спасибо. Разобрался.

Т.е. (?:шаблон) по идее должно работать чуточку быстрее...
А (:шаблон) - я так понимаю - это как раз аналог (шаблон)? ?
И можно ли сделать, чтобы не присваивало номер найденному в такой регулярке (шаблон) , т.е. без знака "?" ?
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
02.12.2014, 00:55
Цитата Сообщение от Maestro Посмотреть сообщение
от 31.13.93.0 - 31.13.93.255?
C++
1
String EtalonIP = "^31\\.13\\.93\\.(2(5[0-5]|[0-4]\\d)|1?\\d{2,2})$"
По докам должно пройти.

Добавлено через 3 минуты
Цитата Сообщение от Dragokas Посмотреть сообщение
А (:шаблон) - я так понимаю - это как раз аналог (шаблон)?
Ни разу не встречал, консоль браузера подобное восприняла только как "двоеточие - часть шаблона, просто символ".
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
05.12.2014, 15:03  [ТС]
FraidZZ, Спасибо за вариант.
Code
1
31.13.93.0
Эту не находит.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
05.12.2014, 15:11
Поменял \d{m,n}. Минимальное кол-во чисел = от m до n.

C++
1
String EtalonIP = "^31\\.13\\.93\\.(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})$";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2014, 15:11
Помогаю со студенческими работами здесь

Ошибка в регулярке
При вызове регулярки ошибка.Причем первый раз код выполняется а на второй ошибка. link = link.replace(/(&quot;)/g...

Ошибка в цикле при регулярке
есть такой цикл : foreach ($test] as $value) { $value = preg_replace(&quot;/(\s){2,}/&quot;,' ',$value); // убирает лишние пробелы...

По Регулярке
Привет Всем мне надо паристь из этого кода &lt;span class=&quot;mf_grey&quot;&gt;Родился: &lt;/span&gt;&lt;span class=&quot;mf_nobr&quot;&gt;13 декабря...

не понятност в регулярке
привет скажите пожалуиста почему етот шаблон #^(a)*()+\\1*\\2+$# не совпадается со строкой a24a7

вопрос по регулярке
хочу выкусить форму с хтмл страницы вот код Цитата: var form = Regex.Match(html, @&quot;&lt;form.*?&gt;.*?&lt;/form&gt;&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru