如何匹配以大写字母和非大写字母开头的单词?

How Do I Match Words That Start With Capital And Non Capital Letters?

本文关键字:大写字母 单词 开头 何匹配      更新时间:2023-10-16

我正在尝试创建一个正则表达式,将匹配像cat这样的常规单词,但也能够在不同的情况下匹配该单词。

例如,如果我有一个表达式[Cc]at,正则表达式将匹配,我可以在我的程序中使用它来搜索包含字符串catCat的文件。但是,如果我的表达式只是简单的Catcat,我仍然希望能够在此上进行正则表达式匹配,并仅搜索该表达式的文件。

我相信我有第一部分匹配,但是如果有一些正则表达式向导可以解释这是如何完成的,那就太好了!

这是我的尝试:

([^?][A-Z][a-z][^?]*)

…它将匹配[Cc]at但不匹配catCat

您正在讨论不区分大小写的匹配。它以多种方式启用,取决于正则表达式的风格和上下文:作为后缀修饰符(/cat/i);作为内联修饰符("(?i)cat");作为选项("i", re.I, Pattern.CASE_INSENSITIVE, RegexOptions.IgnoreCase,等);或者,如果您正在使用图形搜索/替换小部件,请选中相应的框。

如果你想让只有的第一个字母不区分大小写,没有办法从正则表达式之外做到这一点。要匹配任何单词(可以以大写或小写字母开头,但之后必须只包含小写字母),可以使用[A-Za-z][a-z]*。或者对应的Unicode字符p{Lu}p{L}*

顺便说一下,这是你的regex正在做的:

([^?][A-Z][a-z][^?]*)
  • 第一个[^?]匹配[(它意味着任何字符,除了? ,我猜这不是你想要的)。
  • [A-Z]匹配C
  • [a-z]匹配c
  • [^?]*匹配剩余部分。

你也可以使用这些,它会把所有的字母都变成小写然后你可以比较

#include <iostream>
using std::cout;
using std::cin;
#include <string>
using std::string;
void toLowerCase(string &str)
{
    for (int i = 0; i < str.length(); i++)
    {
        str[i] = (char)tolower(str[i]);
    }
}
int main()
{
    string str1 = "Cat";
    string str2 = "cAT";
    toLowerCase(str1);
    toLowerCase(str2);
    cout << (str1 == str2);
    cin.ignore();
    return 0;
}