шаблон регулярных выражений не очень хорошо подходит для кода, как назначение - PullRequest
3 голосов
/ 30 мая 2019

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

"k=++g677"
"k=--j77"
"k=++gfrf677frfr"

Я пытался:

([a-zA-Z])([a-zA-Z]|\d)*[=][+][+]|[-][-]|[*][*]|[\/][\/]([\d]*|([a-zA-Z]([a-zA-Z]\d)*))

, но, похоже, оно также соответствуеткак

"k++"
"k=++@ff"

Вы можете помочь?

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Вы можете использовать

^[a-zA-Z_][\da-zA-Z_]*=([+*\/-])\1[a-zA-Z_][\da-zA-Z_]*$

Или, если вам нужно захватить каждую деталь в отдельную группу:

^([a-zA-Z_][\da-zA-Z_]*)(=)(([+*\/-])\4)([a-zA-Z_][\da-zA-Z_]*)$

См. это демонстрационное регулярное выражение и его график :

enter image description here

Детали

  • ^ - начало строки
  • [a-zA-Z_] - заглавная буква ASCII или подчеркивание
  • [a-zA-Z\d_]* - 0 или более буквенно-цифровых символов / _ (заменить на \w, если по умолчанию не поддерживается Юникод)
  • = - знак равенства
  • ([+*\/-])\1 - +, *, / или -, а затем точно один и тот же символ
  • [a-zA-Z_] - буква ASCII или _
  • [a-zA-Z\d_]* - 0 или более буквенно-цифровых символов / _ (заменить на \w, если он не поддерживает Unicode по умолчанию)
  • $ - конец строки.
0 голосов
/ 30 мая 2019

Вы можете использовать следующее регулярное выражение: ([a-zA-Z_](?:[a-zA-Z0-9_])*)\s*=\s*(\d+|(\+\+|--|\*\*|//)?((?:[a-zA-Z_](?:[a-zA-Z0-9_])*))|(?:[a-zA-Z_](?:[a-zA-Z0-9_])*)(\+\+|--))$

Он длинный из-за своей последней части, поэтому он будет совпадать и с k = x++.

Одна проблема заключалась в том, что вы забыли использовать некоторые скобки. Используйте их везде, таким образом, вы можете быть уверены, что ничего не произошло непреднамеренно.

[\d]* ничего не соответствует, [\d]+ - это то, что вы будете использовать.

Примечание: Имя переменной может содержать символ _.

См. Пояснение к regex101 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...