如何在Java中反转正则表达式?例如,'ab.+de' => 'ed.+ba'。
问问题
2998 次
3 回答
4
实际上,倒转大海捞针要比倒转针容易得多。而且由于Matcher
需要 aCharSequence
而不是 a String
,因此您可以通过简单地包装来以微不足道的开销来做到这一点(请参阅Reverse a string in Java, in O(1)?String
的答案)。
有了这些知识,您就可以创建一个替代版本Matcher
,看起来似乎是反转模式,但实际上只是反转输入。
于 2012-05-11T04:00:53.677 回答
4
哇。
您需要为正则表达式构建解析器并反转所有标记/部分。
在这种情况下
ab.+de 是
a , b, .+ , d , e
反过来这是
e、d、.+、b、a
现在想象组
((ab)(.+de))
反过来是
((ed.+)(ba))
于 2012-05-11T04:06:28.817 回答
0
Tiago Peczenyj是正确的,需要处理反向引用、捕获组和命名组。命名组因为在 Java RegEx 中没有限制命名组需要按名称反向引用,所以它可以像任何其他捕获组一样按数字反向引用。
如果有人对 Java 解决方案感兴趣,我实现了一个库来做到这一点。https://github.com/vsch/reverse-regex。
处理所有有效的 Java 正则表达式结构,并提供实用程序类来包装模式、匹配器和反向搜索的输入,以处理所有需要的映射和反转。
于 2017-01-14T19:37:04.253 回答