我有一个关于正则表达式匹配的非常简单的问题,我想要“string”(忽略大小写)匹配
在这种情况下:"thisisastring"
,不应返回任何内容
在这种情况下:"this is a string"
应返回“string”上的单个匹配
现在我有@"([S|s][T|t][R|r][I|i][N|n][G|g])"
作为正则表达式,但在第一种情况下它无法正常工作。
我该怎么写这个正则表达式?
提前致谢!
答案 0 :(得分:1)
[S|s]
与您的想象不符
请注意,[S|s]
并不代表“匹配S
或s
”。这意味着“匹配一个字符S
,|
或s
”。这就是[character class]
内部的工作方式。要表达OR,您可以使用非捕获组:(?:S|s)
。但[Ss]
就是你所需要的,而且不区分大小写更好。
<强>不区分大小写强>
我将假设我们使用不区分大小写的模式,因此我们最终得到一个更简单的正则表达式。我假设您使用的是C#,因为看起来您使用的是逐字字符串:(?i)
将起作用。在C#中设置不区分大小写的另一种方法是RegexOptions.IgnoreCase
选项1:边界(关闭但没有雪茄)
(?i)\bstring
这不再与string
中的astring
匹配。但是,它与string
中的##string
匹配,您不需要。
选项2:lookbehind
(?i)(?<=[ ])string
lookbehind确保string
前面有空格字符。括号是可选的,它们有助于查看空间。
选项3:\K
(但不在C#中)
对于支持它的引擎(Perl,PCRE,Ruby 2 +):
(?i)[ ]\Kstring
\K
告诉引擎放弃与其返回的最终匹配相匹配的内容