正则表达式仅在分隔符之后匹配任何子字符串

时间:2019-02-28 19:57:52

标签: regex

如何定义一个正则表达式,它将匹配如下所示的确切字符串: {VAR}

或以下任何格式: {VAR:10} {VAR:某物} ...表示如果存在“:”,则接受它右边的任何内容,直到结束}。

因此,它不应与此匹配: {VAR2}或{VAR3}等

现在我正在使用2个单独的正则表达式来搜索上述2种情况,并且想使用一种。

3 个答案:

答案 0 :(得分:1)

可能有点粗糙,但是我相信这是您要寻找的东西

^{VAR(}|(:[A-Z0-9]+?)})$

这将把字符串的开头作为{VAR,然后检查是否找到}或a:,然后是一系列数字或大写字符,直到找到}。

编辑: 我不知道OP会在字符后寻找任何东西,所以我写了一个新版本,可以容纳任何字符。

^{VAR(}|(:.+)})$

这里也是其中的Demo

答案 1 :(得分:1)

首先,我建议阅读前瞻性,回顾性和If-Then-Else构造。我建议在www.regular-expressions.info上this article进行详细说明

下面的正则表达式应捕获您的需求

{VAR(?(?=:)[^}]*}|})

Demo

该模式以{VAR开头,因为在所有情况下这都是恒定的。 然后,我们利用if-then-else构造和正面看待检查冒号(?(?=:),并在[^}]*}存在冒号的情况下匹配所有内容,包括右括号。如果不存在冒号,则|或|之后的部分。只会匹配右大括号}。

答案 2 :(得分:0)

尝试使用正则表达式:{VAR}|(?<={VAR:)\w+(?=})

Demo