[英]Regular expression, lost result group
问题是,您的分组不正确/不必要。 使用以下内容:
^\/color\s(set|update)?\s?(#[A-Fa-f0-9]{6}|#[A-Fa-f0-9]{3}|[a-zA-Z]{1,20})$
您的问题与正则表达式的这一部分有关。
(#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})|([a-zA-Z]{1,20})
通过将它们分组的方式以及OR运算符的优先级,如果这两个正则表达式中的任何一个为真,则基本上将其评估为捕获:
^\/color( set| update)? (#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})
([a-zA-Z]{1,20})$
由于字符串“ / color set red”与十六进制检查不匹配,因此它确定左侧为假,而右侧为真。 因此,为什么它要争取权利。
我建议以此方式重写您的正则表达式。 这样,它将在字符串的每个参数之间考虑一个或多个空格和制表符。
^\/color[ \t]*(set|update)?[ \t]+(\#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[a-zA-Z]{1,20})$
我已经添加了命名组并解决了第二个空格的问题,在省略操作的情况下,这会导致/color red
不匹配。
^\\/color\\s+(?<op>set|update)?\\s*(?<color>#[AFaf09]{6}|[A-Fa-f0-9]{3}|[a-zA-Z]{1,20})\\s*$
单击此处测试正则表达式。 另外,由于SebastianRedl指出C ++不支持此功能,因此在下面还会找到没有命名捕获的版本。
^\\/color\\s+(set|update)?\\s*(#[AFaf09]{6}|[A-Fa-f0-9]{3}|[a-zA-Z]{1,20})\\s*$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.