我试图写一个正则表达式,将验证一个变量赋值在一个BB风格的代码,我目前正在开发。
变量赋值是这样的
[assign {var_name} = "string value"]
你可以给多个变量赋值,比如
[assign {var1} = {var2} = true]
或者在变量中添加
[assign {var_name} .= " more..."]
递增/递减变量[assign {var}++] or [assign {var}--]
赋一个负值
[assign {var1} = !{var2}]
到目前为止,我已经提出了以下的正则表达式不太工作
/
'[assign
(?:
['s]*(?:
['!]?'{[^'}]+'}(?:(?:'+'+)|(?:'-'-))?
|
[0-9]+
|
'"[^'"]+'"
|
''[^'']+''
|
true
|
false
)['s]*(?:'=['s]*|'.'=['s]*)?
)+
']
/
我被以下内容困住了:
- 我需要确保在每个部分之间使用。=或=
- 并确保值和变量被分配给变量,而不是变量被分配给值
- 最后确保有一个实际的赋值,除非值递增或递减
更新:工作正则表达式
'[assign(?:'s)*
(
'{[^'}]+'}
(?:
'+'+
|
--
|
(?:'s)*(?:'.)?=(?:'s)*
(?:(?:!)?'{[^'}]+'}(?:'s)*(?:'.)?=(?:'s)*)*
(?:
[0-9]+
|
"[^"]+"
|
'[^']+'
|
true
|
false
|
(?:!)?'{[^'}]+'}
)
)
)
(?:'s)*']
如果您只需要匹配这些情况,您可以使用以下正则表达式来解析它们:
^(?:assign {var.*?})('+'+|--| (?:'.)?= ({var.*?} = )*(true|".+"|!{var.*?}))$
它将匹配以下内容:
assign {var_name} = "string value"
assign {var1} = {var2} = true
assign {var_name} .= " more..."
assign {var}++
assign {var}--
assign {var1} = !{var2}
assign {var235} = "two"
assign {var1} = {var2} = {var3} = true
它将不匹配以下内容:
assign lol = hi
assign {var3} = {var4}
assign {var5} = !"hi"