繁体   English   中英

检查两个正则表达式是否与java中的相同字符串匹配

[英]check if two regexes match the same strings in java

我有两个正则表达式(简单的示例:“ [0-9] +”和“ [0123456789] +”)。 我想看看它们是否完全匹配相同的输入。 是否有内置函数可以在Java中执行此检查? 如果不是,是否有相对简单的算法来进行检查? 谢谢!

尽管很复杂,实际上有一种算法可以检查正则表达式是否相等。 这是如何做:

  1. 将两个正则表达式都转换为等效的NFA。 这是一个众所周知的定义过程。
  2. 通过Powerset结构将两个NFA转换为DFA
  3. 给定DFA的交集和补码是封闭的,并且定义明确 ,请构造两个DFA的XOR。 (这在某种程度上是对符号的滥用,但是如果自动值是A和B,则构造AB'+ A'B)
  4. 这台最终的机器代表了原始正则表达式之间的差异(一个正则表达式中的任何字符串,而另一个不可见)。 现在,只需从DFA的开始到结束运行图形可达性即可。 如果失败,则等于成功;等于不相等!

首先,它是完全一样的。 其次,我无法想象内置函数可以实现您想要的功能。 思考:您实际上想将正则表达式与多个输入匹配。 什么输入? 随机字符串? 在这种情况下,您的随机字符串仅包含数字的可能性非常大。

我可以稍微改变一下你的问题。 这是我的版本。

*我有2个正则表达式,想验证它们是否能正常运行。 *

这个问题是有道理的。 在这种情况下,我可以使用一个流行的单元测试框架(例如JUnit或TestNG)编写一系列单元测试,并针对这两个正则表达式运行相同的测试。 我希望每次都能得到相同的结果。 但是我必须自己写字符串。 例如

  • 空字符串
  • 仅带字母的字符串
  • 仅带数字的字符串
  • 带有特殊字符的字符串
  • 具有unicode字符的字符串
  • 以前的混合物

等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM