You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LabVIEW实现正则表达式括号合法性校验的问题求助

LabVIEW 数学表达式括号合法性校验实现方案

括号合法性校验无需完全依赖正则表达式实现,直接用栈计数逻辑实现效率更高、边界场景覆盖更全,具体可按以下方案操作:

核心校验逻辑

  • 初始化两个计数变量:左括号计数、右括号计数,初始值均为0
  • 逐字符遍历输入的数学表达式:
    • 遇到(时,左括号计数+1
    • 遇到)时,右括号计数+1
    • 遍历过程中如果出现右括号计数 > 左括号计数的情况,直接判定非法,输出False
  • 遍历完成后,判断左括号计数 == 右括号计数,相等则输出True,否则输出False

LabVIEW 具体操作步骤

  1. 前面板创建两个控件:
    • 字符串输入控件,命名为数学表达式,用于输入待校验内容
    • 布尔显示控件,命名为括号合法性,可自定义亮灭对应合法/非法状态
  2. 程序框图实现:
    • 调用字符串至字节数组转换函数,将输入字符串拆分为单个字符的ASCII码数组
    • 用For循环遍历数组元素,循环内设置两个移位寄存器分别存储左、右括号计数:
      • 条件结构判断当前字符ASCII码:等于40(对应()则左计数+1,等于41(对应))则右计数+1,其余字符不修改计数
      • 每次计数更新后新增判断:如果右计数 > 左计数,直接给布尔控件赋值False,同时调用终止循环节点提前结束遍历
    • 循环正常结束后,判断两个计数是否相等,相等则赋值True,否则赋值False
  3. 边界用例测试验证:
    • 空字符串:输出True
    • (a+b)*(c-d):输出True
    • a+b):提前终止,输出False
    • ((a+b):遍历结束计数不等,输出False
    • a+(b*(c-d))+e:输出True

正则表达式替代方案

如果要复用正则能力实现,可调用LabVIEW内置匹配正则表达式函数,适配混合字符数学表达式的正则规则为^[^()]*(?:(\((?>[^()]+|(?1))*\))[^()]*)*$,匹配成功则返回True,否则返回False。该方案代码量更小,但兼容性和可维护性弱于自定义计数方案,优先推荐用计数法实现。

内容的提问来源于stack exchange,提问作者MichalB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:15:02