fallen2080 Ответов: 2

Как я могу решить свою регулярную ошибку "Квантор {x, y} после ничего"?


У меня есть строка регулярного выражения, на которой я тестировал www.regex101.com чтобы найти совпадения для определенного шаблона. Когда я пытаюсь добавить его в свой VB. NET winform, он терпит неудачу с необработанным исключением:

разбор "выражение\B(?:ТП и\D{1,4}|ФД выражение\D{1,4}|МЗ выражение\D{1,4})(*пропустить)(*не)|[А-я]{1,2} и\D{1,4}\ч|(КСП)\б" - Квантор {х,г} после ничего.

Что я уже пробовал:

Dim regexPartName As New Regex("\b(?:TP\d{1,4}|FD\d{1,4}|MH\d{1,4})(*SKIP)(*FAIL)|[A-Z]{1,2}\d{1,4}\b|(PCB)\b")

If regexECADName.IsMatch(bodyFound.Name)
'STUFF
End If

Richard Deeming

Различные движки регулярных выражений поддерживают разные вещи. Похоже, что вы используете стандартный "аромат" regex на этом сайте, который является использование PCRE (РНР).

Вам нужно протестировать что-то более близкое .Синтаксис сети. Javascript, вероятно, самый близкий; он не поддерживает все это .Сеть есть, но ...NET должен поддерживать все, что делает Javascript.

Язык Регулярных Выражений - Краткая Справка[^]

2 Ответов

Рейтинг:
14

phil.o

* это Квантор, который должен быть помещен после элемент, который он должен количественно определить.
В этих двух элементах (*SKIP) и (*FAIL), кванторы неуместны и приводят к тому, что вы получаете сообщение об ошибке.

Я лично использую Экспрессо[^] для построения и проверки правильности моих регулярных выражений. Может быть, вам стоит попробовать этот бесплатный инструмент, который поможет вам создавать правильные регулярные выражения.

Любезно.


fallen2080

(?!) работает как замена (*FAIL), но я не могу найти замену для (*SKIP) в VB.NET-да. Это, по-видимому, является причиной ошибки, которую я получал.

phil.o

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

fallen2080

(*SKIP) действует так же, как (*PRUNE), за исключением того, что если паттерн не закреплен, то продвижение bumpalong происходит не к следующему символу, а к позиции в предмете, где был обнаружен (*SKIP)

Рейтинг:
0

Patrice T

Решение 1 уже дает вам ответ.
Совет: используйте более 1 инструмента для тестирования вашего регулярного выражения, как вы можете видеть Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^] счастлив с выражением, которое является неправильным. Обычно я использую последнюю ссылку.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]