2015-09-23 5 views
1

Я в настоящее время строит веб-приложения на Java, и я новичок в regex.I имеют следующие требования для проверки формулы:Regex выражение частично проверки выражение

Формула может содержать следующий набор символов:

  • цифра: 0 - 9
  • Альфа: A - Z
  • Операторы: *, /, +, -
  • сепаратор:;

Состояние:

  • Формула должна начинаться с «Т»
  • символ «Т» всегда должно сопровождаться цифрой или альфа.
  • Сепаратор должен всегда следовать за «Т».
  • Символу «M» всегда следует следовать оператор.
  • Оператор должен быть всегда с последующей цифрой

У меня есть следующее выражение, как показано ниже:

^(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$ 

Следующее выражение удовлетворяется с вышеуказанным выражением регулярного выражения, которое является действительным:

TA123; T1 * 2/32M +

Но я не знаю, как добавить следующую проверку в регулярное выражение выше:

  • Оператор должен быть всегда с последующей цифрой
  • Символ «Т» должен быть всегда следует цифра или альфа.
  • За сепаратором всегда следует «Т»
  • Символу «М» всегда следует следовать оператор.

Регулярное выражение выражение выше допустимого приведенного выше условия частично только те, один ниже, должно быть недействительным, но это действительно что неправильно:

Один ниже не должен работать в качестве оператора (*, /, +, -) всегда должно сопровождаться цифрой, но в этом случае она действует:

T4R* 

Один ниже не должен работать как символ «T» всегда должен сопровождаться цифрой или альфа, но в этом случае действует:

T4RT 

Один ниже, не должны работать в качестве разделителя (;) всегда должен следовать «Т», но в этом случае она действует:

T4; 

Один ниже, не должен работать как символ «М» всегда должен следовать оператор, но в этом случае он действует:

T4RTM 

Привет @vks,

После применения изменений в выражении Изотерм пожалуйста найти результат ниже:

Один ниже не должен работать в качестве оператора (*, /, +, -) всегда должно сопровождаться цифрой

Он работает с характером, но не с цифрой и ожидаемым является цифра:

Недопустимый T4R * H

действует T4R * 5

символ «Т» всегда должен сопровождаться цифрой или альфа:

T4RT недействительным, как и ожидалось T4RT5 должен быть действительным, но фактический результат является недействительным T4R должен быть действительным, но реальный результат недействителен

Сепаратор (;) всегда должен следовать «Т»:

T4, T должен быть действительным, но фактический результат недействителен T4; недействителен, как и ожидалось

Символ «M» всегда должен сопровождаться оператором:

T4RTM должен быть + действительным, но фактический результат недействительным T4RTM недействительным, как ожидается,

Любая идея, как, какие изменения необходимы для регулярного выражения выражение, чтобы заполнить вышеуказанные критерии PLS?

Заранее спасибо за любую помощь

+0

'TA123; T1 * 2/32M +' является недействительным тоже, как не существует ни одна цифра перед it.please добавить уважительной exmaples – vks

ответ

0

Регулярное выражение является правильным . Единственный способ, которым он может потерпеть неудачу, - это то, что у вас есть newline после вы вводите. Чтобы решить, что вы можете использовать

См. демонстрационную версию.

https://regex101.com/r/sS2dM8/51

+0

привет спасибо за ответ вопрос обновляется в соответствии с новым expresion – user1999453

+0

@ user1999453 T4RTM + не может быть действительным, так как нет цифр после того, как оператор.check отредактировал !!!!!!!!! – vks

+0

извиняется за мою ошибку за T4RTM +, теперь он отлично работает благодаря большому количеству vks. – user1999453

-1

Разбейте задачу на более мелкие куски, и решать их один за другим.

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

  • проверка /^[0-9A-Z\*\/\+\-\;]*$/https://regex101.com/r/sS2dM8/46
  • проверка /^T.*$/ (формула должна начинаться с «Т») https://regex101.com/r/sS2dM8/45
  • проверить, что /^.*T(?![0-9A-Z]).*$/ не соответствует (это будет соответствовать, если был T, за которым не последовала цифра или альфа) https://regex101.com/r/sS2dM8/47
  • проверить, что /^.*;(?!T).*$/ не соответствует (это будет соответствовать, если бы был сепаратор не следует проверки T) https://regex101.com/r/sS2dM8/48
  • , что /^.*M(?![\*\/\+\-]).*$/ не соответствует (это будет соответствовать, если бы был M не последовало оператором) https://regex101.com/r/sS2dM8/49
  • проверка, что /^.*[\*\/\+\-](?!\d).*$/ не соответствует (это будет соответствовать, если есть оператор не следует цифра) https://regex101.com/r/sS2dM8/50
  • вы можете легко проверить дополнительные вещи здесь

мИНУСЫ:

  1. немного хуже производительность

расквитаться:

  1. легче читать и понимать
  2. легче поддерживать и расширять
  3. легче проверить