gpt4 book ai didi

java - 如何在 Java 中执行两个命名正则表达式字符类的交集?

转载 作者:行者123 更新时间:2023-12-01 11:42:05 25 4
gpt4 key购买 nike

我知道如何从中找到两个常量集的交集 link Java 教程。

示例:

 [0-9&&[345]]

将生成一个字符类,其中包含与单位数整数集 ('[0-9]') 相交的所有字符以及包含整数 3、4 和 5 的该集的子集 ('[345] ')。

这可以很好地满足大多数需求,但它要求在编译时知道这两个集合。假设我正在为数学表达式编写一个词法分析器,并且想要找到一元运算符和二元运算符集之间的交集。目前,两个集中都存在的唯一运算符是“-”。作为二元运算符“-”代表减法,但作为一元运算符它也代表否定。我预计其他运营商将来可能会被迫双用,并希望开发一种解决方案,不仅适用于当前情况,而且无需更改代码即可适用于 future 情况。为此,我需要能够在运行时确定两个集合中都存在哪些运算符。

假设我有两个定义如下的字符类:

public static final String UNARYOPS = "[!~-]";
public static final String BINARYOPS = "[|&%^*/+-]";

如何使用 Java 中的正则表达式引擎找到这两个命名字符集之间的交集,以便识别哪些运算符需要检查二进制和一元之间的歧义?

最佳答案

这两个单一表达式没有内置的正则表达式运算符。您必须自己对其进行硬编码。

旁注:您的正则表达式在字符类中包含“-”,它具有特殊含义,必须转义:

public static final String UNARYOPS = "[!~\\-]";
public static final String BINARYOPS = "[|&%^*/+\\-]";

现在要么在字符串级别上执行:

String regex = UNARYOPS.substring(0, UNARYOPS.length() - 1) + "&&" + BINARYOPS + "]";

或者将字符类的所有字符分别放入一个集合中。然后将这些集合相交。

关于java - 如何在 Java 中执行两个命名正则表达式字符类的交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com