Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式,如何得到下面的代码名和长度值?_Java_Regex - Fatal编程技术网

Java 使用正则表达式,如何得到下面的代码名和长度值?

Java 使用正则表达式,如何得到下面的代码名和长度值?,java,regex,Java,Regex,我有以下代码: @Column(name = "SWIFT_NUMBER") @Column(name = "SHIP_ADDRESS", length=500) @Column(name = "CONTENT",length=10240) //@Column(name = "USED_SPACE", columnDefinition = "bigint(20)") @Column(name = "TPL", columnDefinition = "TEXT

我有以下代码:

    @Column(name = "SWIFT_NUMBER")
    @Column(name = "SHIP_ADDRESS", length=500)
    @Column(name = "CONTENT",length=10240)
   //@Column(name = "USED_SPACE", columnDefinition = "bigint(20)")
    @Column(name = "TPL", columnDefinition = "TEXT")
我想使用java正则表达式来获取每一行的
name
length

  • 如果当前行没有长度属性,则只获取
    name
    value
  • 如果带有
    /
    java注释的当前行未获取名称和长度 价值观
我试着写正则表达式:

.*@Column.*name.*\"(.*?)\"((?:.*)|(.*length.*(\\d+).*))

但是只获取名称值,无法获取长度值。

如果可能,我将加载该类并使用反射读取值。另一种方法是使用注释处理器(显示如何生成代码。只需使用从已解析类读取信息的部分)或ASM()读取已编译类


用正则表达式解析Java代码通常是一件混乱的事情,应该避免。

我完全同意ruediste的观点,用正则表达式解析Java代码不是最好的主意,你应该真正避免(参见上面的链接)

然而,如果你真的,真的必须,也许可以试试这个正则表达式:

(?<!\/\/)@Column.*?name\s*=\s*"(.*?)"(?:.*?length\s*=\s*(\d+))?
(?

(第一组:名称,第二组:长度,可选)

对不起,java需要转义,我尝试使用
*@Column.*?name\\s*=\\s*\“(.*?)”(?:*?length\\s*=\\s*(\\d+))
但不匹配
@Column(name=\'name\',length=80)
你真的有
\'name\'
在源代码中?如果是这样,正则表达式将不匹配,因为它只允许
名称
=
与带引号的字符串之间存在空格。