如何检查字符串开头和结尾是否包含[ ]

3

如何使用正则表达式检查一个字符串的开头是否是 [ ,结尾是否是 ]

我想检查这个字符串是否可以被 JSON.parse 使用。

/^\[.*\]$/ 是我想到的,但好像并不起作用。


你可以使用 /\A\[.*\]\z/m 来检查任何字符串是否以 [ 开头并以 ] 结尾。 - Wiktor Stribiżew
@WiktorStribiżew 谢谢,这个可行!请添加一个答案,这样我就可以接受它了。 - The Nomad
1
如果您的真正目的是检查正确的JSON格式,那么这就是一个XY问题。您应该将其解析为JSON,包装在救援块中,并查看它是否检测到任何JSON解析错误。 - sawa
刚想建议@sawa所说的。示例代码:begin; JSON.parse(my_string); rescue JSON::ParserError; false; else; true; end。或者如果您喜欢简短和神秘的方式:JSON.parse(my_string) && true rescue false。不过在您的实际用例中,也许您想要对解析后的JSON执行一些有用的操作,而不是返回一个布尔值。 - Henrik N
为什么必须使用正则表达式?因为呢? - the Tin Man
3个回答

6

不需要使用正则表达式,可以使用 start_withend_with

s = "[text\nhere]"
puts s.start_with?("[") and s.end_with?("]")
# => true

请查看Ruby演示

如果您需要正则表达式,可以使用

/\A\[.*\]\z/m

检查任何以[开头并以]结尾的字符串。

解释:

  • \A - 字符串开头
  • \[ - 一个字面意义上的[
  • .* - 0个或多个字符,包括换行符(由于使用了 /m修饰符)
  • \] - 结束的]
  • \z - 字符串末尾。

请查看正则表达式演示


请注意,您的\A [\w\z]模式匹配字符串的开头,然后是1个字符:可以是单词字符(字母/数字/下划线)或者一个 z (因为 \z在字符类内被视为 z,而不是锚点)。 - Wiktor Stribiżew
正则表达式应该只包含2个正则表达式定界符,所以它应该是 if self.text =~ /\A\[.*\]\z/m { } - Wiktor Stribiżew
使用方法而非正则表达式。方法更快,更清晰地展示你想要做什么。 - the Tin Man

1
如果您只想在开头和结尾进行检查,为什么不这样做?
string = "[foo..bar]"
str = string.strip
str[0] == "[" && str[-1] == "]"

-2

由于方括号[]用于创建正则表达式列表,因此您必须对它们进行转义:

 /\A\[.*\]\z/

谢谢!\w将会匹配在[ ]之间的任意数量的字符,对吗? - The Nomad
我曾以为你对那里想要的很确定。我已经修改了它,使其查找以方括号开头和结尾的字符串,而不管中间是什么。 - David Hoelzer
@DavidHoelzer \z(表示字符串结尾)需要放在结束括号后面,而且 . 如果没有 /m 标志是无法匹配换行符的,就像 Wiktor 的回答一样。 - Henrik N
实际上,/\A\[.*\z\]/是一个永远不会匹配的正则表达式的例子 :) - Wiktor Stribiżew
没错。抱歉,今天真的很累。 :) - David Hoelzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接