如何在Java中反转正则表达式?例如,'ab。+ de'=> '编+ BA'。
答案 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构造,并提供实用程序类来包装模式,匹配器和输入以进行反向搜索,以处理所有需要的映射和反转。