我需要一个如下工作的正则表达式,我已经尝试了一天而无法理解它。
(IIILjava/lang/String;Ljava/lang/String;II)V = ['I', 'I', 'I', 'I',
'Ljava/lang/String;', 'Ljava/lang/String;', 'I', 'I'] Ignoring whats after )
(IIJ)J = ['I', 'I', 'J']
(IBZS)Z = ['I', 'B', 'Z', 'S']
到目前为止我已经获得了(I|D|F|Z|B|S|L.+?;)
,但我无法忽略那些在')之后的角色。
(?<=\([^()]{0,10000})[A-Z][^A-Z()]*(?=[^()]*\))
(?<=\([^()]{0,10000})
正面看后方确保(
之前的位置,其次是除(
或)
之外的任何字符,介于0到10000次之间。可以根据需要调整上限,但不能是无限的。[A-Z]
匹配任何大写的ASCII字母[^A-Z()]*
匹配除大写ASCII字母,(
或)
之外的任何字符数次(?=[^()]*\))
确定以下内容的正面预测是除(
或)
之外的任何字符,其次是)
结果:
['I', 'I', 'I', 'I', 'Ljava/lang/String;', 'Ljava/lang/String;', 'I', 'I']
['I', 'I', 'J']
['I', 'B', 'Z', 'S']
示例代码:See in use here