正则表达式:忽略区分大小写
Posted
技术标签:
【中文标题】正则表达式:忽略区分大小写【英文标题】:Regex: ignore case sensitivity 【发布时间】:2012-03-28 03:35:44 【问题描述】:如何使以下正则表达式忽略大小写?它应该匹配所有正确的字符,但忽略它们是小写还是大写。
G[a-b].*
【问题讨论】:
只在正则表达式中包含大写和小写字母或在进行正则表达式匹配之前转换为大写 G[a-bA-B].* 在这种一般情况下是显而易见的,区分大小写取决于 afaik 平台,您没有提供平台。 如果您使用的是 Java,您可以使用 Pattern 类指定:Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
。
更多 Java 选项在这里:blogs.oracle.com/xuemingshen/entry/…
请注意,对于grep
ing,它只是添加了-i
修饰符。例如:grep -rni regular_expression
递归搜索此 'regular_expression' 'r',大小写 'i'nsensitive,在结果中显示行 'n'numbers。
【参考方案1】:
假设您希望 整个 正则表达式忽略大小写,您应该查找 i
flag。几乎所有的正则表达式引擎都支持它:
/G[a-b].*/i
string.match("G[a-b].*", "i")
查看您的语言/平台/工具的文档,了解如何指定匹配模式。
如果您只希望正则表达式的 部分 不区分大小写(正如我最初的回答所假定的那样),那么您有两种选择:
使用(?i)
和[可选](?-i)
模式修饰符:
(?i)G[a-b](?-i).*
将所有变体(即小写和大写)放入正则表达式 - 如果不支持模式修饰符,则很有用:
[gG][a-bA-B].*
最后一点:如果您正在处理除 ASCII 之外的 Unicode 字符,请检查您的正则表达式引擎是否正确支持它们。
【讨论】:
太棒了!适用于:perl -pe 's/^utf-8\?B\?.*$//gi' Cancer.1631,匹配/替换字符串“UTF-8?B?”在文件 Cancer.1631 中。这失败了: perl -pe 's/^utf-8\?B\?.*$//g' Cancer.1631,由于大小写不匹配。 如果不是这样一个具体的例子,这篇文章会更清楚。就像如果您想忽略另一个单词(例如“.txt”和“.TXT”)的大小写。从这个答案来看,我仍然不确定我该如何做到这一点。 由于某种原因,您发布的正则表达式在find
扩展正则表达式中不起作用.. 例如 find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)
不显示任何文件夹.. 白色类似的正则表达式 find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)
没有修饰符确实显示了正确的文件夹。知道为什么吗?
这里我试图仅在当前文件夹中查找以字符[a-c]
开头的所有文件夹.. 进行更多操作..
老实说,我会将选项 2 放在答案的主要部分,因为它是通用的并且适用于所有正则表达式引擎。【参考方案2】:
取决于实施 但我会使用
(?i)G[a-b].
变化:
(?i) case-insensitive mode ON
(?-i) case-insensitive mode OFF
现代正则表达式风格允许您仅将修饰符应用于正则表达式的一部分。如果您在正则表达式的中间插入修饰符 (?im),则该修饰符仅适用于正则表达式中修饰符右侧的部分。使用这些风格,您可以通过在它们前面加上减号 (?-i) 来关闭模式。
描述来自页面: https://www.regular-expressions.info/modifiers.html
【讨论】:
这是 TortoiseHg 搜索正则表达式引擎的修饰符格式。 您能告诉我一般情况下如何在 Linux shell(例如在 egrep 中不使用“-i”开关)中实现这一点吗? 解释(?i)
的作用以及如何结束它 ((?-i)
) 将非常有帮助。这就是为什么您的答案获得的票数是排名第一的问题的 1/3 而不是几乎一样多的原因,因为他们解释了这个微妙的细节。
对于谁在使用pypi.org/project/regex,在属于正则表达式组合的正则表达式中使用 (?i)(即正则表达式与 OR 的连接)将给予它更高的优先级(即订单将不再是正则表达式所写的相同广告)
在 .NET/C# 中为我工作。【参考方案3】:
验证'abc'忽略大小写的正则表达式
(?i)(abc)
【讨论】:
与 android Studio logcat 完美配合 也可以在 python 中工作 也可以在 C# 中使用 同样适用于 maXbox:writeln(ReplaceRegExpr('(?i)\bsubstring\b',loadfile,'newstring',false)); 在 Java 中运行良好。【参考方案4】:i
标志通常用于不区分大小写。您在这里没有提供语言,但它可能类似于 /G[ab].*/i
或 /(?i)G[ab].*/
。
【讨论】:
【参考方案5】:为了完整起见,我想在 C++ 中使用 Unicode 添加正则表达式的解决方案:
std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);
if (std::tr1::regex_match(szString, pattern))
...
【讨论】:
有人可以向我解释为什么这篇文章被否决了吗?接受的解决方案使用特定的代码,为了完整起见,我想为语言 c++ 的标准库添加解决方案。在我看来,我为一个更普遍的问题创造了附加值。 szPattern 是 OP 的G[a-b].*
而 szString 是要测试的字符串【参考方案6】:
正如我从这篇类似的帖子 (ignorecase in AWK) 中发现的,在旧版本的 awk 上(例如在原版 Mac OS X 上),您可能需要使用 'tolower($0) ~ /pattern/'
。
IGNORECASE
或 (?i)
或 /pattern/i
将生成错误或对每一行返回 true。
【讨论】:
【参考方案7】:[gG][aAbB].* 如果模式不太复杂或不太长,可能会简化解决方案。
【讨论】:
很想知道为什么这个答案对于给定的问题是错误的? 您的回答中包含“不太复杂或太长” 这实际上是唯一适用于我的情况的解决方案。此外,它看起来像是最通用的解决方案,应该在任何地方都可以使用。对于特定的正则表达式实现,所有其他答案似乎都非常具体。【参考方案8】:C#
using System.Text.RegularExpressions;
...
Regex.Match(
input: "Check This String",
pattern: "Regex Pattern",
options: RegexOptions.IgnoreCase)
具体来说:选项:RegexOptions.IgnoreCase
【讨论】:
【参考方案9】:在 javascript 中,您应该将 i
标志传递给 RegExp
构造函数,如 MDN 中所述:
const regex = new RegExp('(abc)', 'i');
regex.test('ABc'); // true
【讨论】:
【参考方案10】:JavaScript
如果你想让它不区分大小写,只需在正则表达式末尾添加i
:
'Test'.match(/[A-Z]/gi)
//返回["T", "e", "s", "t"]
没有i
'Test'.match(/[A-Z]/g)
//返回 ["T"]
【讨论】:
【参考方案11】:除了已经接受的答案:
Grep 用法:
请注意,对于grep
ing,它只是添加了-i
修饰符。例如:grep -rni regular_expression
递归搜索此 'regular_expression' 'r',大小写 'i'nsensitive,在结果中显示行 'n'numbers。
另外,这是一个验证正则表达式的好工具:https://regex101.com/
Ex:看这张图片中的表达和解释。
参考资料:
手册页 (man grep
)
http://droptips.com/using-grep-and-ignoring-case-case-insensitive-grep
【讨论】:
【参考方案12】:在 Java 中,Regex
构造函数有
Regex(String pattern, RegexOption option)
所以要忽略案例,请使用
option = RegexOption.IGNORE_CASE
【讨论】:
【参考方案13】:科特林:
"G[a-b].*".toRegex(RegexOption.IGNORE_CASE)
【讨论】:
【参考方案14】:您还可以将您要检查模式匹配的初始字符串引导为小写。并分别在您的模式中使用小写符号。
【讨论】:
【参考方案15】:您可以使用查找/替换在 Visual Studio 和 Visual Studio Code 中练习正则表达式。
对于带大小写的正则表达式,您需要同时选择匹配大小写和正则表达式。否则 [A-Z] 将不起作用。请在此处输入图片说明
【讨论】:
以上是关于正则表达式:忽略区分大小写的主要内容,如果未能解决你的问题,请参考以下文章