4

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

4

3 回答 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 回答