Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的反向正则表达式_Java_Regex_Reverse - Fatal编程技术网

Java中的反向正则表达式

Java中的反向正则表达式,java,regex,reverse,Java,Regex,Reverse,如何在Java中反转正则表达式?例如,“ab.+de”=>“ed.+ba”。事实上,倒干草堆要比倒针容易得多。由于Matcher采用CharSequence而不是String,因此只需简单地包装String(请参阅的答案)即可轻松完成此操作 有了这些知识,您可以创建另一个版本的Matcher,它看起来像是在反转模式,但实际上只是反转输入。哇 您需要为正则表达式构建一个解析器,并反转所有标记/部分 在这种情况下 ab.+de是 a,b,.+,d,e 反过来说,这是 e、 d、.+、b、a 现在想象

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

事实上,倒干草堆要比倒针容易得多。由于
Matcher
采用
CharSequence
而不是
String
,因此只需简单地包装
String
(请参阅的答案)即可轻松完成此操作

有了这些知识,您可以创建另一个版本的
Matcher
,它看起来像是在反转模式,但实际上只是反转输入。

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

在这种情况下

ab.+de是

a,b,.+,d,e

反过来说,这是

e、 d、.+、b、a

现在想象一下团队

((ab)(.+de))

反之亦然

((ed.+)(ba))

正确,需要处理反向引用、捕获组和命名组。命名组由于Java正则表达式中不限制命名组需要通过名称进行反向引用,因此可以像任何其他捕获组一样通过编号进行反向引用


如果有人对Java解决方案感兴趣,我实现了一个库来实现这一点


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

+1似乎是一个很好的解决方案:保持递归反转子组,然后将子组连接在一起(反向)在备份堆栈的过程中。特殊的正则表达式,比如(?是的,我只为正则语言的真正正则表达式实现它。它基本上就是级联(
.abc
)、交替(
.a | b | c
)和有限计数(
{.2}.a+b?c{,3}/code>).Nope,这些也不是真正的正则语言的一部分。除非您可以使用三个规则来实现它:串联、交替和有限计数(分组也可以与其中任何一个结合使用),它不是真正的正则表达式,因为它定义了比正则语言更具表现力的东西。如果有人对Java解决方案感兴趣,我实现了一个库来实现这一点。处理所有有效的Java正则表达式构造,并提供工具类来包装模式和匹配器,以便进行反向搜索,以处理所有需要的映射和反向我需要这样做来实现向后搜索。