我有两个单独的字符串:
1. "@colorVariableOne: @color_white;"
2. "@colorVariableTwo: #008000;"
我使用以下正则表达式模式来测试字符串是否匹配:
string colorVariablePattern = @"(@[a-zA-Z0-9-_]+): (#[0-9a-fA-F]{3,})|.*(@color_[a-zA-Z0-9-_]+).*;";
模式成功匹配两个字符串,但没有正确填充第一个字符串的组:
更具体地说,它没有捕获第一个变量名组,这是我关心的那个?我错过了什么吗?
编辑:
我需要它匹配/不匹配以下所有字符串:
@ala-bala__portokala: fade(@color_k1, 40%); // MATCH
@ala-bala: rgb(255, 255, 255); // MATCH
@ala-bala: rgba(16, 16, 16, 0.2); // MATCH
@ala-bala__portokala: #cccccc; // MATCH
@ala-bala__portokala: 1px solid @color_w; // MATCH
@ala-bala__portokala: @color_r1; // MATCH
@ala-b: @colozr_p; // NOT MATCH
@ala-b: 2px; // NOT MATCH
编辑2:
所以,经过一些改动之后,这是正确匹配所有内容的最终正则表达式:
(@[a-zA-Z0-9-_]+): .*(?:(@color_[a-zA-Z0-9-_]+)|(#[0-9a-fA-F]{3,})|(rgb[a]?[(].*[)])).*;
答案 0 :(得分:2)
源字符串中的第1个不包含#...
部分,
因此第一个变体将不匹配。
因此正则表达式处理器尝试第二个变体(" |"之后), 其中包含仅一个捕获组,匹配 @color_white 。
可能你的意图是:
@colorVariable...:
匹配的内容。@<color_name>
或#<numbers>
匹配的匹配项。将正则表达式更改为:
(@[a-zA-Z0-9-_]+): (?:(#[0-9a-fA-F]{3,})|(@color_[a-zA-Z0-9-_]+));
请注意,现在它包含:
@colorVariable...
匹配的组。;
。