我试图形成一个正则表达式,它将匹配“看起来”像数组的字符串。将字符串匹配到数组的正则表达式
- 必须与
[
,{
或(
- 开始必须与
]
,}
,或)
结束 - 不要紧,如果开始和结束使用相同的托架(如
(....}
是罚款) - 项目是以逗号分隔
- 忽略所有空白类型
- 空数组必须接受
我想出什么样的主意最初是
'/\s*[\[|\{|\(]\s*\w+\s*[,\s*\w+]*\s*[\]|\}|\)]\s*/'
不幸的是这不接受空数组。所以,我试图另一个
'/\s*[\[|\{|\(][\s*\w+\s*]?[,\s*\w+]*\s*[\]|\}|\)]\s*/'`
这一个允许空数组,但也允许与开口支架(例如[, item, item]
)后逗号开始的阵列。
我目前正在做的是使用两个不同的正则表达式并检查其中一个或另一个匹配。另一个正则表达式类似于我在这里提到的第一个正则表达式,但是它只允许打开和关闭标记之间的零个或多个空白字符。
出于某种原因,我让parens捕获子模式的事实使我不知道它可以用来列出替代品。方括号可以相似地嵌套,或者是使用parens的原因吗? – Matt 2012-07-15 06:55:54
@Matt在我熟悉的所有正则表达式系统中,[]仅用于[a-z0-9_]等范围。他们不嵌套,也不分组。 ()用于捕获和修改运算符顺序,就像算术(1 + 2)* 3与1 + 2 * 3一样。 ()可以嵌套。给定的一对()的捕获部分通常可以被禁用,例如perl中的(?:expression)。 – walrii 2012-07-15 15:12:06