如何使以下正则表达式忽略区分大小写?它应匹配所有正确的字符,但忽略它们是低级还是大写.
G[a-b].*
Run Code Online (Sandbox Code Playgroud)
mgi*_*nbr 372
假设你想要整个正则表达式忽略大小写,你应该寻找i标志.几乎所有正则表达式引擎都支持它:
/G[a-b].*/i
string.match("G[a-b].*", "i")
Run Code Online (Sandbox Code Playgroud)
查看语言/平台/工具的文档,了解如何指定匹配模式.
如果你只想要部分正则表达式不区分大小写(假设我的原始答案),那么你有两个选择:
使用(?i)和[可选] (?-i)模式修饰符:
(?i)G[a-b](?-i).*
Run Code Online (Sandbox Code Playgroud)将所有变体(即小写和大写)放在正则表达式中 - 如果不支持模式修饰符,则非常有用:
[gG][a-bA-B].*
Run Code Online (Sandbox Code Playgroud)最后一点:如果您处理除ASCII之外的Unicode字符,请检查您的正则表达式引擎是否正确支持它们.
elr*_*ado 123
取决于实施,但我会使用
(?i)G[a-b].
Run Code Online (Sandbox Code Playgroud)
变化:
(?i) case-insensitive mode ON
(?-i) case-insensitive mode OFF
Run Code Online (Sandbox Code Playgroud)
现代正则表达式风格允许您仅将修饰符应用于正则表达式的一部分.如果在正则表达式的中间插入修饰符(?im),则修饰符仅适用于修饰符右侧的正则表达式部分.有了这些风格,您可以通过在前面添加减号(?-i)来关闭模式.
描述来自页面:https: //www.regular-expressions.info/modifiers.html
Fra*_*ein 15
为了完整起见,我想用Unicode在C++中添加正则表达式的解决方案:
std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);
if (std::tr1::regex_match(szString, pattern))
{
...
}
Run Code Online (Sandbox Code Playgroud)
JavaScript
如果你想让它不区分大小写,只需i在正则表达式末尾添加:
'Test'.match(/[A-Z]/gi)//返回[“T”,“e”,“s”,“t”]
没有i
'Test'.match(/[A-Z]/g)//返回[“T”]
在 JavaScript 中,您应该将i标志传递给构造函数,如MDNRegExp中所述:
const regex = new RegExp('(abc)', 'i');
regex.test('ABc'); // true
Run Code Online (Sandbox Code Playgroud)
C#
using System.Text.RegularExpressions;
...
Regex.Match(
input: "Check This String",
pattern: "Regex Pattern",
options: RegexOptions.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)
具体来说:选项:RegexOptions.IgnoreCase
小智 5
正如我从这篇类似的帖子(AWK 中的 ignorecase)中发现的那样,在旧版本的 awk(例如在 vanilla Mac OS X 上),您可能需要使用'tolower($0) ~ /pattern/'.
IGNORECASEor(?i)或/pattern/i将为每一行生成错误或返回 true。