假设我有以下字符串:
[AttributeName value1:Foo value2:Bar]
AttributeName 或 valueX 并不重要。我可以将它们视为一系列文字或数字字符。
我的问题如下:我怎样才能匹配[AttributeName]
以及
[AttributeName value1:Foo value2:Bar]
, 但不是
[AttributeNamevalue1:Foo value2:Bar]
? 我对正则表达式相当陌生,所以关于答案的一些细节会非常好。
我尝试了以下方法:
\[ *[a-zA-Z0-9_]+ *([a-zA-Z0-9_]+:[a-zA-Z0-9_]+)*\]
据我了解,它匹配一个字符串,该字符串包含一个以“[”开头的序列,后跟 0 个或多个空格,后跟一个或多个字母数字字符,然后是 0 个或多个空格。问题来了。如果我使用*
匹配 0 个或多个空格,[AttributeNamevalue1:Foo value2:Bar]
则将被匹配。但是如果我使用+
, then[AttributeName]
将不会匹配,因为后面没有空格。如何执行 if-then-else 类型的检查?我找到了一些来源,但没有一个以适合初学者的方式解释这个问题。