C++ 使用正则表达式验证印度车牌号码
在这个问题中,我们将使用正则表达式来验证印度车牌号码。
正则表达式是使用不同字符创建的搜索模式,可以用来匹配给定字符串中的特定模式。
问题描述 - 我们已经给出一个表示印度车牌号码的字符串。我们需要使用正则表达式来验证给定的字符串。
示例
输入
num1 = "GJ 03 AY 1097"
输出
Yes
说明 - 给定的车牌号码是有效的。
输入
num2 = "TN 1A3 PZ 1287"
输出
No
解释 - 给定的车牌号由于字符 ‘1A3’ 是无效的。
输入
num2 = "DL 29 KJX 0001"
输出
No
解释 - 由于’KJX’,给定的车牌号码无效。
方法1
有效的印度车牌号的示例为GJ 03 AY 1097。
- 车牌号包含2个州编号。
-
之后,它包含2位数字,代表区号。
-
接下来,它包含1个或2个字母字符。
-
最后,它包含4位数字。
用户可以按照以下正则表达式验证印度车牌号码。
“^[A-Z]{2}[ -]?[0-9]{2}[ -]?[A-Z]{1,2}[ -]?[0-9]{4}$”
让我们来理解这个正则表达式。
- ^ – 它表示车牌号的开始。
-
[A – Z]{2} – 它应该包含2个大写字母字符。
-
[ -]? – 之后,它可以包含空格或连字符。
-
[0-9]{2}[ -]? – 它应该包含2位代表区号的数字。
-
[A-Z]{1,2} – 它应该包含1个或2个字母字符。
-
[0-9]{4}$ – 最后,它应该包含4个数字。
算法
步骤1 - 定义名为patt的正则表达式模式。
步骤2 - 如果字符串为空,则返回’No’。
步骤3 - 使用regex_match()方法将车牌号字符串与’patt’验证。
步骤4 - 如果regex_match()方法返回true,则从函数返回’yes’。否则,从函数返回’No’。
示例
#include <bits/stdc++.h>
#include <regex>
using namespace std;
string checkForNumberPlate(string numPlate) {
// Defining the regular expression
const regex patt("^[A-Z]{2}[ -]?[0-9]{2}[ -]?[A-Z]{1,2}[ -]?[0-9]{4}$");
// When the string is empty
if (numPlate.empty()) {
return "No";
}
// Return the answer after validating the number plate
if (regex_match(numPlate, patt)) {
return "Yes";
} else {
return "No";
}
}
int main() {
string num1 = "GJ 03 AY 1097";
cout << "Is " << num1 << " Valid? - " << checkForNumberPlate(num1) << endl;
string num2 = "TN 1A3 PZ 1287";
cout << "Is " << num2 << " Valid? - " << checkForNumberPlate(num2) << endl;
return 0;
}
输出
Is GJ 03 AY 1097 Valid? - Yes
Is TN 1A3 PZ 1287 Valid? - No
时间复杂度-O(N)匹配模式。
空间复杂度-O(1),因为我们不使用任何额外的空间。
程序员可以尝试创建另一个正则表达式来验证印度车牌。例如,它不应该允许在正则表达式之间存在空格或连字符。此外,regex_search()方法可以使用正则表达式验证字符串。