我需要匹配这样的东西:
int a= 4, b, c = "hi";
我已经制作了一个正则表达式,成功地将所有内容从行中删除,只留下
a= 4, b, c = "hi"
我并不关心变量的类型,例如" hi"是String
,因为稍后会在代码中检查。
基本上,我需要将变量声明与除了变量本身之外的所有内容相匹配,有或没有= part。
这些是不应匹配的示例:
a b= 4
var,
,hello=3
=8
我已经检查了this个问题,但它并没有真正帮助。
我已经尝试了this代码,但是有一些问题,即我在不应该匹配的内容中列出的所有内容都匹配。
也可能有更多我错过的东西。
我应该使用空格匹配字符串,例如a = "hello there"
,并且不需要在其中匹配字符串,
。
"正式"对变量名称的定义可以是:
变量名可以是字母(大写或小写),数字和下划线字符的任何序列(长度> 0)。名称不能以数字开头。名称可以以下划线开头,但在这种情况下,它必须至少包含一个字符
感谢您的帮助!
答案 0 :(得分:1)
从您的regex101示例中,我对其他要求并不十分清楚,因此我意识到这可能无法完全回答您的问题。
"[^"]*"|((?=_[a-z_0-9]|[a-z])[a-z_0-9]+(?=\s*=))
此正则表达式将执行以下操作:
_
和至少一个字符开头,或者以a-z开头a-z
_
或0-9
=
符号=
符号现场演示
https://regex101.com/r/aT6sC4/1
示例文字
name = "steve", bro = "4, hi = bye", lolwot = "wait wot"
样本匹配
请注意捕获组1仅包含变量名称。
[0][0] = name
[0][1] = name
[1][0] = "steve"
[1][1] =
[2][0] = bro
[2][1] = bro
[3][0] = "4, hi = bye"
[3][1] =
[4][0] = lolwot
[4][1] = lolwot
[5][0] = "wait wot"
[5][1] =
NODE EXPLANATION
----------------------------------------------------------------------
" '"'
----------------------------------------------------------------------
[^"]* any character except: '"' (0 or more times
(matching the most amount possible))
----------------------------------------------------------------------
" '"'
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
(?= look ahead to see if there is:
----------------------------------------------------------------------
_ '_'
----------------------------------------------------------------------
[a-z_0-9] any character of: 'a' to 'z', '_', '0'
to '9'
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
[a-z] any character of: 'a' to 'z'
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
[a-z_0-9]+ any character of: 'a' to 'z', '_', '0'
to '9' (1 or more times (matching the
most amount possible))
----------------------------------------------------------------------
(?= look ahead to see if there is:
----------------------------------------------------------------------
\s* whitespace (\n, \r, \t, \f, and " ")
(0 or more times (matching the most
amount possible))
----------------------------------------------------------------------
= '='
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------