我正在尝试开发正则表达式以检查用于测验模块的问题写作语法。
一种问题类型是拖放,其格式为...
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]}
...不是,还有任何其他组合。
到目前为止,我已经知道了,但是显然不起作用:(
(.*\{.*\})+
请有人帮我吗?
答案 0 :(得分:1)
如果{
之间不能出现}
和{}
,并且方括号可以出现在花括号的外面,但不能出现在花括号的内部,则可以使用:
^[^\r\n{}]*(?:{[^\][\r\n{}]*}[^\r\n{}]*)+$
^
字符串的开头[^\r\n{}]*
对除换行符或{
和}
之外的所有字符重复0次以上
(?:
非捕获组
{[^\][\r\n{}]*}
匹配{
,然后0+乘除换行符或任何[]{}
以外的任何字符[^\r\n{}]*
匹配0+次以下任意字符,除了换行符或{
和}
)+
关闭组并重复至少1次或多次,以确保存在可拖动的{...}
$
字符串结尾