正则表达式匹配变量声明

时间:2016-06-01 16:52:19

标签: java regex

我需要匹配这样的东西:

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)。名称不能以数字开头。名称可以以下划线开头,但在这种情况下,它必须至少包含一个字符

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

描述

从您的regex101示例中,我对其他要求并不十分清楚,因此我意识到这可能无法完全回答您的问题。

"[^"]*"|((?=_[a-z_0-9]|[a-z])[a-z_0-9]+(?=\s*=))

Regular expression visualization

此正则表达式将执行以下操作:

  • 匹配引用的字符串
  • 将变量名称放入Capture Group 1,然后您可以遍历测试捕获组1的匹配数组中的值,如果填充了它,那么它就是一个名称。
  • 要求变量名称以_和至少一个字符开头,或者以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
----------------------------------------------------------------------