说我有以下字符串:
[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]
将匹配。但是,如果我使用+
,则[AttributeName]
将不会匹配,因为后面没有空格。
我怎样才能执行if-then-else类型的检查?我找到了一些消息来源,但没有一个以初学者友好的方式解释这个问题。
答案 0 :(得分:2)
\[\s*\w+(\s+\w+:\w+)*\s*\]
应该有效。以下是按代码分类的细分:
(这是我为InDesign编写的实用程序的输出。)
答案 1 :(得分:0)
你需要为它添加一个空格,如:
\[([a-zA-Z0-9_]+)(?:\s+)([a-zA-Z0-9_]+:[a-zA-Z0-9_]+(?:\s+))*\]
我为AttributeName添加了一个捕获组,为空格添加了一个非捕获组。