Regex:忽略大小写

如何使下面的正则表达式忽略大小写敏感性?它应该匹配所有正确的字符,但忽略它们是小写还是大写。

G[a-b].*
1188787 次浏览

i标志通常用于不区分大小写。这里没有给出语言,但可能是/G[ab].*/i/(?i)G[ab].*/之类的。

假设你想要整个正则表达式忽略大小写,你应该寻找i国旗。几乎所有的正则表达式引擎都支持它:

/G[a-b].*/i


string.match("G[a-b].*", "i")

查看您的语言/平台/工具的文档,以查找匹配模式是如何指定的。

如果你只想让正则表达式的部分不区分大小写(就像我最初的答案假设的那样),那么你有两个选择:

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

    (?i)G[a-b](?-i).*
    
  2. Put all the variations (i.e. lowercase and uppercase) in the regex - useful if mode modifiers are not supported:

    [gG][a-bA-B].*
    

One last note: if you're dealing with Unicode characters besides ASCII, check whether or not your regex engine properly supports them.

取决于实现 但我会用

(?i)G[a-b].

变化:

(?i) case-insensitive mode ON
(?-i) case-insensitive mode OFF

现代正则表达式风格允许您仅对正则表达式的一部分应用修饰符。如果在正则表达式的中间插入修饰符(?im),则该修饰符仅适用于正则表达式中修饰符右侧的部分。对于这些口味,您可以通过在它们前面加上负号(?-i)来关闭模式。

描述来自页面: https://www.regular-expressions.info/modifiers.html < / p >

只是为了完整起见,我想在Unicode中添加正则表达式的解决方案:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);


if (std::tr1::regex_match(szString, pattern))
{
...
}

您还可以将您要检查模式匹配的初始字符串引导为小写。在你的图案中分别使用小写符号。

正如我从这篇类似的文章(在AWK中ignorecase)中发现的那样,在老版本的awk上(比如在普通的Mac OS X上),你可能需要使用'tolower($0) ~ /pattern/'

IGNORECASE(?i)/pattern/i将为每一行生成一个错误或返回true。

正则表达式验证'abc'忽略大小写敏感

(?i)(abc)

(gG) [aAbB]。*如果图案不是太复杂或太长,可能是简单的解决方案。

除了已经被接受的答案之外:

Grep用法:

注意,对于greping,它只是添加了-i修饰符。例如:grep -rni regular_expression来搜索这个'正则表达式' 'r',大小写'i'不敏感,在结果中显示'n'行数。

此外,这里还有一个用于验证正则表达式的很棒的工具:https://regex101.com/

例:请看这幅图中的表达和解释。

enter image description here

引用:

c#

using System.Text.RegularExpressions;
...
Regex.Match(
input: "Check This String",
pattern: "Regex Pattern",
options: RegexOptions.IgnoreCase)

具体来说:选项:RegexOptions。IgnoreCase

在Java中,Regex构造函数具有

Regex(String pattern, RegexOption option)

要忽略大小写,请使用

option = RegexOption.IGNORE_CASE

你可以使用查找/替换在Visual Studio和Visual Studio Code中练习Regex。

对于带大小写的正则表达式,需要同时选择“匹配大小写”和“正则表达式”。否则[A-Z]行不通。在这里输入图像描述

Visual Studio 2019社区

JavaScript

如果你想让它不区分大小写,只需在regex的末尾添加i:

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

没有i

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

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

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


regex.test('ABc'); // true

芬兰湾的科特林:

"G[a-b].*".toRegex(RegexOption.IGNORE_CASE)