正则表达式匹配重复模式

时间:2020-02-10 20:58:21

标签: regex

我正在尝试开发正则表达式以检查用于测验模块的问题写作语法。

一种问题类型是拖放,其格式为...

the {rain} falls gently on the {plain}

...,其中带括号的术语是可拖动的。必须至少有一个带括号的术语,但它们可以在字符串中的任何位置出现。括号中的术语之间也不需要任何东西。所以以下任何一项都是有效的...

{the} rain falls gently on the plain

the rain falls gently on the {plain}

{the} {rain} {falls} {gently} {on} {the} {plain}

{the }{rain }{falls }{gently }{on }{the }{plain}

此外,使事情复杂化的是,括号内不能有任何方括号-这是另一种问题类型。所以...

{the} {rain}

...可以,但是...

{the} {[rain]}

...不是,还有任何其他组合。

到目前为止,我已经知道了,但是显然不起作用:(

(.*\{.*\})+

请有人帮我吗?

1 个答案:

答案 0 :(得分:1)

如果{之间不能出现}{},并且方括号可以出现在花括号的外面,但不能出现在花括号的内部,则可以使用:

^[^\r\n{}]*(?:{[^\][\r\n{}]*}[^\r\n{}]*)+$
  • ^字符串的开头
  • [^\r\n{}]*对除换行符或{}之外的所有字符重复0次以上
  • (?:非捕获组
    • {[^\][\r\n{}]*}匹配{,然后0+乘除换行符或任何[]{}以外的任何字符
    • [^\r\n{}]*匹配0+次以下任意字符,除了换行符或{}
  • )+关闭组并重复至少1次或多次,以确保存在可拖动的{...}
  • $字符串结尾

Regex demo