【发布时间】:2021-10-05 22:34:25
【问题描述】:
如果我有以下正则表达式字符串:
String one = "\"/^[^.]+$|\\.(?!(avi|bmp)$)([^.]+$)/i\"";
String two = "\"/^.*\\.(txt)$/i"";
假设我只想从字符串中解析出文件扩展名,例如,我想:
List<String> fileExtensionsOne = getFileExtensionsFromRegex(one); // Returns ("avi",bmp")
List<String> fileExtensionsTwo = getFileExtensionsFromRegex(two); // Returns ("txt")
实现getFileExtensionsFromRegex 的最佳方式是什么?是否可以将字符串转换为 Java Regex 对象并从中获取组?例如不将模式应用于某些输入文本?
编辑,我想我可以依靠正则表达式模式保持相当一致,要么是这样:
'/^.*\\.(' + _map(extensions, 'text').join('|') + ')$/i'
或者这个:
'/^[^.]+$|\\.(?!(' + _map(extensions, 'text').join('|') + ')$)([^.]+$)/i'
【问题讨论】:
-
这些正则表达式模式中有多少是恒定的?单扩展的情况总是
"\"/^.*\\.(ext)$/i"",两个扩展的情况总是"\"/^[^.]+$|\\.(?!(ext1|ext2)$)([^.]+$)/i\"",两个以上的扩展类似吗?我敢肯定,可以想出许多不同的正则表达式模式,它们都进行相同的文件扩展名匹配。你肯定不想写一个成熟的正则表达式分析器(除非你有几年的空闲时间)。 -
@RalfKleberhoff 为问题添加了更多信息 - 我认为模式将保持一致