我想使用Java将字符串集转换为正则表达式。
我为此搜索了很多东西,但是互联网上没有这样令人满意的答案可以解决我的问题。所以我想在这里问。
如果可以的话,首先可以将其转换,然后请建议我摆脱目前所面临的问题的方法?
假设我有几组字符串
abb
abababb
babb
aabb
bbbbabb
...
我想为其做一个正则表达式,例如
(a+b)*abb
这怎么可能?
答案 0 :(得分:3)
答案 1 :(得分:3)
如果您有一组字符串,并且想要构建一个与任何这些字符串匹配的正则表达式,则应构建一个使用|
OR模式的正则表达式。
由于字符串可能包含正则表达式特殊字符,因此需要将其引号。
要确保最佳字符串匹配,您需要首先匹配最长字符串。例如。如果aba
和abax
都在列表中,并且要扫描的文本包含abax
,我们希望在第二个字符串而不是第一个字符串上进行匹配。
因此,您可以这样做:
public static String toRegex(Iterable<String> strings) {
return StreamSupport.stream(strings.spliterator(), false)
.sorted(Comparator.comparingInt(String::length).reversed())
.map(Pattern::quote)
.collect(Collectors.joining("|"));
}
答案 2 :(得分:0)
您可以使用here中所述的Pattern.compile
方法。
答案 3 :(得分:0)
我不相信你可以。
问题是您只想提供有效字符串的全部集合中的一部分,并且该算法无法从给定的子集中推断出确切的完整集合。如果确实提供了完整的有效字符串集(似乎不太可能),则可以在注释中使用David Zimmerman的答案。或者,也许更有效地,只需使用Set即可容纳完整的有效字符串集并测试候选字符串。