2013-09-19 4 views
0

В настоящее время мы сопоставляем пользовательский ввод с использованием регулярного выражения ([^=]*)(=[01]). Пользователь вводит имя сигнала (nnnann, где п является числовым и является алфавитно-цифровой символ) и его значение, то есть 0 или 1.Регулярное выражение для соответствия различным шаблонам

Пример: 101e10 = 1

Теперь мы должны расширить парсер также соответствовать шаблону t = N, где N означает число.

Пример: Т = 5000

Я пытался расширить регулярное выражение для соответствия оба случая с использованием ([^=]*)(=[01])|(^t)(=[0-9]*), но с использованием этого выражения первая часть уже соответствует шаблону т = N.

Как я могу исключить шаблон t, который будет соответствовать первой части выражения [^=]*?

Я уже попытался вычесть рисунок, используя ([^=]-[t]*)(=[01])|(^t)(=[0-9]*) или ([^=]*-[t])(=[01])|(^t)(=[0-9]*), но оба не делают этого трюка. Кроме того, у меня такое чувство, что обе попытки не являются правильным использованием функции вычитания.

+0

Можете ли вы предоставить некоторые примеры строк, которые * будут * совпадать, а некоторые строки, которые * не совпадают *? –

ответ

1

Вы могли бы, возможно, изменить первое регулярное выражение, так что это более строго по его проверке.

([01]{3}[a-z][01]{2})(=[01]) 

А затем объединить с вашим вторым регулярным выражением:

([01]{3}[a-z][01]{2})(=[01])|(^t)(=[0-9]*) 

Или так как вы знаете, что первый формат начинается с 0 или 1, вы могли бы сделать:

(^[01][^=]*)(=[01])|(^t)(=[0-9]*) 
+0

Более строгая проверка делает именно то, что я искал. * facepalm *, что у меня не было идеи сделать его более строгим. Благодаря... – PVitt

1

Я думаю, что нужно что-то вроде этого:

(?:([0-9][^=]*)(=[01])|(t)(=[0-9]*)) 
+0

Спасибо за быстрый ответ. Это работает для t = N, где первый символ N не равен 1. t = 1000 снова будет соответствовать первой части. – PVitt

+0

@PVitt как насчет сейчас? –

+0

По сути. :) Благодаря. – PVitt

Смежные вопросы