正则表达式:忽略区分大小写

bro*_*her 268 regex

如何使以下正则表达式忽略区分大小写?它应匹配所有正确的字符,但忽略它们是低级还是大写.

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)

查看语言/平台/工具的文档,了解如何指定匹配模式.

如果你只想要部分正则表达式不区分大小写(假设我的原始答案),那么你有两个选择:

  1. 使用(?i)和[可选] (?-i)模式修饰符:

    (?i)G[a-b](?-i).*
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将所有变体(即小写和大写)放在正则表达式中 - 如果不支持模式修饰符,则非常有用:

    [gG][a-bA-B].*
    
    Run Code Online (Sandbox Code Playgroud)

最后一点:如果您处理除ASCII之外的Unicode字符,请检查您的正则表达式引擎是否正确支持它们.

  • 如果不是这样一个具体的例子,这篇文章会更清楚。就像如果你想忽略另一个单词的大小写,比如“.txt”和“.TXT”。通过查看这个答案,我仍然不确定如何做到这一点。 (6认同)

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

  • 解释 `(?i)` 的作用以及如何结束它 (`(?-i)`) 会非常有帮助。这就是为什么你的答案的票数是第一个问题的 1/3,而不是几乎一样多,因为他们解释了这个微妙的细节。 (3认同)

小智 47

用于验证'abc'的正则表达式忽略区分大小写

(?i)(abc)
Run Code Online (Sandbox Code Playgroud)


cho*_*ban 46

i标志通常用于不区分大小写.你没有在这里提供一种语言,但它可能就像是/G[ab].*/i.


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)


Pre*_*vic 8

JavaScript

如果你想让它不区分大小写,只需i在正则表达式末尾添加:

'Test'.match(/[A-Z]/gi)//返回[“T”,“e”,“s”,“t”]

没有i

'Test'.match(/[A-Z]/g)//返回[“T”]


Yul*_*ian 8

在 JavaScript 中,您应该将i标志传递给构造函数,如MDNRegExp中所述:

const regex = new RegExp('(abc)', 'i');

regex.test('ABc'); // true
Run Code Online (Sandbox Code Playgroud)


Don*_*ong 6

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。