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

如何判断字符串仅包含{([])}字符?正则表达式失效求助

解决字符串仅包含指定括号字符的检查问题

看起来你在写一个方法检查字符串是否只包含{([])}这些括号字符时遇到了正则表达式的问题,我来帮你梳理一下问题所在并给出解决方案。

问题分析

你当前使用的正则表达式"[{(\\[\\])}]"存在两个关键问题:

  1. 匹配范围不对:matches()方法会检查整个字符串是否完全匹配正则表达式,而你写的这个正则只能匹配单个符合条件的字符(比如"{"或"("),对于长度大于1的字符串(比如你的测试用例"([)()]")自然无法匹配成功。
  2. 字符类写法冗余:在正则的字符类[]内部,除了]需要转义(或者放在字符类开头),其他括号(){}不需要额外转义,你的写法有点多余。

正确的解决方案

我们需要调整正则表达式,确保它能匹配整个字符串都由指定括号组成,正确的正则应该是:"^[(){}\\[\\]]+$"

正则说明

  • ^:匹配字符串的开头
  • [(){}\\[\\]]:字符类,包含所有允许的括号字符:(){}[]
  • +:匹配前面的字符类至少一次(确保字符串不为空,如果允许空字符串可以换成*)
  • $:匹配字符串的结尾

完整的Java方法示例

public static boolean isOnlyBrackets(String s) {
    // 处理空字符串的情况:如果允许空串返回true,就把+换成*
    return s != null && s.matches("^[(){}\\[\\]]+$");
}

测试用例验证

我们来对应你的测试用例验证:

  • String S = "{U}":包含非括号字符'U',返回false,符合预期
  • String S = "[U]":包含'U',返回false,符合预期
  • String S = "U":全为非括号字符,返回false,符合预期
  • String S = "([)()]":所有字符都是指定括号,返回true,符合预期

额外说明

如果你之后需要检查括号是否合法嵌套(比如"([)]"这种要返回false),那就要用栈来实现了,但根据你的测试用例,当前只需要检查字符是否属于指定集合,上面的正则就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:17:37