Ruby中如何检测字符串内的空括号、圆括号与大括号?
在Ruby中检测字符串是否包含空括号的解决方案
嘿,这个需求其实用正则表达式就能轻松搞定,大概率是你之前写正则的时候没处理好括号的转义问题,导致匹配不到目标内容。下面给你两种靠谱的实现方式:
方法一:用match?快速判断(推荐)
match?方法会在找到第一个匹配项时就停止扫描,性能更优,很适合这个场景:
def valid_string?(str) # 匹配空的()、[]、{},取反返回结果 !str.match?(/\(\)|\[\]|\{\}/) end
方法二:用scan检查匹配结果
如果你更习惯用scan,可以通过判断扫描结果是否为空来实现:
def valid_string?(str) # 扫描所有空括号,结果为空则说明字符串有效 str.scan(/\(\)|\[\]|\{\}/).empty? end
验证示例
我们用你给出的测试用例逐一验证,结果完全符合预期:
- 有效案例1:
valid_string?("Some text some text (some text) some text some text")→true - 有效案例2:
valid_string?("Some text some text [some text] some text some text")→true - 有效案例3:
valid_string?("Some text some text {some text} some text some text")→true - 无效案例1:
valid_string?("Some text some text () some text some text")→false - 无效案例2:
valid_string?("Some text some text [] some text some text")→false - 无效案例3:
valid_string?("Some text some text {} some text some text")→false
正则表达式解释
这里的正则/\(\)|\[\]|\{\}/需要重点理解:
\(和\):转义圆括号,因为括号在正则中是特殊字符(用来分组),转义后才能匹配字面量的()\[和\]:同理,转义方括号,匹配字面量的[]\{和\}:转义大括号,匹配字面量的{}|:表示逻辑“或”,只要字符串中存在任意一种空括号,就会被匹配到
内容的提问来源于stack exchange,提问作者jedi
相关产品推荐
相关产品推荐

