正则表达式模式不适用于类似赋值的代码

时间:2019-05-30 06:05:29

标签: regex

我正在尝试使用正则表达式来匹配表达式,例如代码分配 例如:

"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 个答案:

答案 0 :(得分:2)

您可以使用

^[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_]*)$

请参见this regex demoits graph

enter image description here

详细信息

  • ^-字符串的开头
  • [a-zA-Z_]-大写ASCII字母或下划线
  • [a-zA-Z\d_]*-0个或多个字母数字/ _(如果默认情况下不识别Unicode,请替换为\w
  • =-等号
  • ([+*\/-])\1-+*/-,然后恰好1个相同的字符
  • [a-zA-Z_]-ASCII字母或_
  • [a-zA-Z\d_]*-0个或多个字母数字/ _(如果默认情况下不识别Unicode,请替换为\w
  • $-字符串的结尾。

答案 1 :(得分:0)

您可以使用以下正则表达式:git.init

由于末尾很长,因此也将与([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]+字符。

See explanation on regex101...