Ios 使用NSRegularExpression拆分由NSString组成的方程并查找方程的左侧
我的应用程序中有如下字符串:Ios 使用NSRegularExpression拆分由NSString组成的方程并查找方程的左侧,ios,objective-c,regex,nsregularexpression,Ios,Objective C,Regex,Nsregularexpression,我的应用程序中有如下字符串: b=c+32 我使用下面的代码片段解析字符串,将其拆分为b、=、c、+、32。那很好。然而,我需要知道哪个变量是=运算符的左侧。此变量在表达式中始终位于第一位。在NSRegularExpressions中是否有方法为我提供结果索引,以便我可以比较它们以查看=。如果有一个更好的匹配,这将给我的第一个元素,我也会满足 下面是拆分它们的代码 NSString * textpattern = @"[A-Za-z]+"; NSString * n
b=c+32
我使用下面的代码片段解析字符串,将其拆分为b、=、c、+、32。那很好。然而,我需要知道哪个变量是=运算符的左侧。此变量在表达式中始终位于第一位。在NSRegularExpressions中是否有方法为我提供结果索引,以便我可以比较它们以查看=。如果有一个更好的匹配,这将给我的第一个元素,我也会满足
下面是拆分它们的代码
NSString * textpattern = @"[A-Za-z]+";
NSString * numberpattern = @"[0-9]+";
NSString * opPattern = @"[-+/*]";
NSString * copPattern = @"=";
NSRegularExpression * reg = [NSRegularExpression regularExpressionWithPattern: @"(\\d+\\.\\d+)|(\\d+)|([a-z])|([+-/*=///^])|([/(/)])" options:0 error:nil];
NSArray *matches = [ reg matchesInString: exp
options: 0
range:NSMakeRange(0, [exp length])];
for (NSTextCheckingResult *match in matches) {
NSString* text = [exp substringWithRange:[match range]];
NSMutableDictionary *term = [NSMutableDictionary new];
if ([text doesMatchRegStringExp:textpattern])
{
NSLog(@"variable");
[term setObject:@"variable" forKey:@"name"];
}
else if ([text doesMatchRegStringExp:numberpattern])
{
NSLog(@"number");
[term setObject:@"number" forKey:@"name"];
}
else if ([text doesMatchRegStringExp:opPattern])
{
NSLog(@"op");
[term setObject:@"op" forKey:@"name"];
}
else if ([text doesMatchRegStringExp:copPattern])
{
NSLog(@"cop");
[term setObject:@"cop" forKey:@"name"];
}
else
{
[term setObject:@"other" forKey:@"name"];
}
}
// NSString+RegExpExtensions.h
#import <Foundation/Foundation.h>
@interface NSString (RegExpExtensions)
- (BOOL)doesMatchRegStringExp:(NSString *)string;
@end
#import "NSString+RegExpExtensions.h"
@implementation NSString (RegExpExtensions)
- (BOOL)doesMatchRegStringExp:(NSString *)string {
NSPredicate *regExpPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", string];
return [regExpPredicate evaluateWithObject:self];
}
@end
多谢各位 根本不清楚你想做什么。你为什么不把你要解决的问题说得清楚、简洁呢?那我们也许能帮上忙。嗨,邓肯,我编辑了这个问题。请让我知道它现在是否更有意义。对于前面的歧义,我深表歉意。您可以将正则表达式用于lex,但不能解析数学表达式。使用ICU正则表达式库的NSRegularExpression没有这样做的能力。