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
值
- 如果当前行没有长度属性,则只获取
valuename
- 如果带有
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\'
在源代码中?如果是这样,正则表达式将不匹配,因为它只允许名称
和=
与带引号的字符串之间存在空格。