在Java中反转正则表达式

时间:2012-05-11 03:57:27

标签: java regex reverse

如何在Java中反转正则表达式?例如,'ab。+ de'=> '编+ BA'。

3 个答案:

答案 0 :(得分:4)

反转干草堆实际上要比针更容易。由于Matcher需要CharSequence代替String,因此您可以通过简单地包裹String来实现这一切(请参阅Reverse a string in Java, in O(1)?的答案)

有了这些知识,您可以创建Matcher的备用版本,它似乎可以反转模式,但实际上只是反转输入。

答案 1 :(得分:4)

哇。

您需要为正则表达式构建解析器并反转所有标记/部分。

在这种情况下

ab。+ de是

a,b,。+,d,e

并反转这是

e,d,。+,b,a

现在想象组

((AB)(+ DE))

相反的是

((编+)(BA))

答案 2 :(得分:0)

Tiago Peczenyj是正确的,需要处理后向引用,捕获组和命名组。命名组,因为Java RegEx中没有限制命名组需要按名称进行反向引用,它可以像任何其他捕获组一样以数字引用。

如果有人对Java解决方案感兴趣,我实现了一个库就可以做到这一点。 https://github.com/vsch/reverse-regex

处理所有有效的Java regex构造,并提供实用程序类来包装模式,匹配器和输入以进行反向搜索,以处理所有需要的映射和反转。