哪个正则表达式可以匹配这些值?

时间:2015-11-20 00:27:02

标签: regex sublimetext

我正在开发新的特定语法。其中有两种代码:

=+-(连续一个或多个加号,减号或等号);

正则表达式为/[+=-]+/

II 6:+15:-999:=(任意整数,后跟一个加号,减号或等号);

正则表达式为/\d+:[+=-]/

在一个条目中,可能存在任何数量的这些代币 每个新条目都必须用括号括起来:[code here] 括号中的各种代码可以彼此相邻:[=6:+-][15:-++=3:+]等 不允许空条目。

所以,我不能使正则表达式匹配正确的条目!
我已尝试过这一个/\[([=+-]*(\d+:[=+-])?[=+-]*)\]/,但它也匹配[],而它是一个ггог。

MATCH 其中任何

[=]     [---]       [+=-]       [=+-]       [17:=]      [==+-]      [6:=-]      [+5:=-]

[==-=+] [+=====-]  [15:-++=3:+] [=======]   [+=-+==-]   [---==--]   [==-=+==]   [=--==--]

没有比赛

[]  [=:1]   [:2+]   [3-:]

2 个答案:

答案 0 :(得分:1)

我不知道什么样的正则表达式,但这应该适用于几乎所有这些:

\[((?:[+=-]+|[+=-]?\d+:[+=-]+)+)\]

Regular expression visualization

Debuggex Demo

它使用|或操作数,因此它捕获一种匹配(-+=符号的集合或冒号等的数字)

此外,似乎由于您希望[+5:=-]匹配,我添加了[+-]?以匹配该内容。

编辑: 这允许多次出现该语言。然而,这可能是微不足道的,因为没有什么可以区分代码的不同部分。

答案 1 :(得分:0)

OMG,它可能方式更简单:

\[(?:(?:\d+:)?[+=-])+\]

我无法相信我是如此愚蠢。