自定义类型的正则表达式
Regular expression for custom types
我有兴趣创建一个新的语法并为该语法构建REGEX。语法是一组允许或不允许单词的规则。
例如,我创建了5种类型:A, B, C, D, e。
我的语法都是像ABC, ABE, ABDC, ABDE这样的单词。(A和B必须,D可选,需要选择C或E)。
如何创建REGEX来检查单词是否适合自定义语法?
(优先使用c/c++或objective c代码)
谢谢你。
A =冰淇淋,B =甜筒,D =生奶油,C =巧克力,E =香草。
所以冰淇淋和蛋筒是必须的,鲜奶油是可选的,需要知道巧克力或香草来接受表达
试试这个
(AB(C|E)D?)|(ABD?(C|E))
For objective C:
NSString *searchedString = @"ice creamconewhipped creamchocolate";//NOTE: here i dont put space
NSString *A = @"ice cream";
NSString *B = @"cone";
NSString *D = @"whipped cream";
NSString *C = @"chocolate";
NSString *E = @"vanila";
NSString *stringRegExp = [NSString stringWithFormat:@"(%@%@(%@|%@)%@?)|(%@%@%@?(%@|%@))",A,B,C,E,D,A,B,D,C,E];//(AB(C|E)D?)|(ABD?(C|E))
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegExp];
if ([myTest evaluateWithObject: searchedString])
{
NSLog(@"MATCHING");
}
else
{
NSLog(@"NOT_MATCHING");
}
类的等价形式:
HomeViewController *objA = [[HomeViewController alloc]init];
NSString *className1 = NSStringFromClass([objA class]);
TableViewController *objB = [[TableViewController alloc]init];
NSString *className2 = NSStringFromClass([objB class]);
CustomTextView *objD = [[CustomTextView alloc]init];
NSString *className4 = NSStringFromClass([objD class]);
CustomTableViewCell *objC = [[CustomTableViewCell alloc]init];
NSString *className3 = NSStringFromClass([objC class]);
NSString *objE;
NSString *searchedStringABDC = [NSString stringWithFormat:@"%@%@%@%@",className1,className2,className3,className4];//CASE ABDC/ ABCD
NSString *A = NSStringFromClass([HomeViewController class]);
NSString *B = NSStringFromClass([TableViewController class]);
NSString *D = NSStringFromClass([CustomTextView class]);
NSString *C = NSStringFromClass([CustomTableViewCell class]);
NSString *E = NSStringFromClass([AssementAndPlanView class]);
NSString *stringRegExp = [NSString stringWithFormat:@"(%@%@(%@|%@)%@?)|(%@%@%@?(%@|%@))",A,B,C,E,D,A,B,D,C,E];//(AB(C|E)D?)|(ABD?(C|E))
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegExp];
if ([myTest evaluateWithObject: searchedStringABDC])
{
NSLog(@"MATCHING");
}
else
{
NSLog(@"NOT_MATCHING");
}
或者如果你不需要正确的顺序,不使用regex,你可以用isKindOfClass
检查。例如:
if ([objA isKindOfClass:[HomeViewController class]]&&[objB isKindOfClass:[TableViewController class]]&&[objC isKindOfClass:[CustomTableViewCell class]]&&!objD&&!objE)
{
//case ABC
NSLog(@"case ABC");
}
else if ([objA isKindOfClass:[HomeViewController class]]&&[objB isKindOfClass:[TableViewController class]]&&[objE isKindOfClass:[AssementAndPlanView class]]&&!objC&&!objD)
{
//case ABE
NSLog(@"case ABE");
}
你可以试试这个规则:
ABD?[CE]
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- C++无符号字符串类型的正则表达式
- Qt - 在没有正则表达式的情况下,将 QString 拆分为几种类型的空格
- 正则表达式:获取 CPP 函数 (c#) 的单独参数和参数类型
- 每个类型匹配一个或多个字符的正则表达式
- 自定义类型的正则表达式