我知道如何找到从这个link到Java教程的两个常量集的交集。
示例:
[0-9&&[345]]
将生成一个字符类,其中包含与单个数字整数集合相交的所有字符(' [0-9]')以及包含整数3,4和的该集合的子集5(' [345]')。
这适用于大多数需求,但它要求在编译时知道这两个集合。让我们说我正在为数学表达式编写一个词法分析器,并希望找到一元运算符集和二元运算符之间的交集。目前,两个集合中唯一存在的运营商是' - '。作为二元运算符' - '表示减法,但作为一元运算符,它也表示否定。我预计其他运营商将来可能会被用于双重用途,并且希望开发一种解决方案,该解决方案不仅适用于本案例,而且适用于未来改变代码的情况。为此,我需要能够在运行时确定两个集合中存在哪些运算符。
假设我有两个字符类定义如下:
public static final String UNARYOPS = "[!~-]";
public static final String BINARYOPS = "[|&%^*/+-]";
如何使用Java中的正则表达式引擎找到这两个命名字符集之间的交集,以便我可以确定哪些运算符需要检查二进制和一元之间的歧义?
答案 0 :(得分:1)
这两个单表达式没有内置的正则表达式运算符。你必须自己硬编码。
旁注:您的正则表达式包含" - "在具有特殊含义且必须转义的字符类中:
public static final String UNARYOPS = "[!~\\-]";
public static final String BINARYOPS = "[|&%^*/+\\-]";
现在要么在字符串级别执行:
String regex = UNARYOPS.substring(0, UNARYOPS.length() - 1) + "&&" + BINARYOPS + "]";
或者您将字符类的所有字符都放入一个集合中。然后交叉这些集合。