2

我正在尝试使用正则表达式(在 iPhone 应用程序上的 Objective-C 中)匹配数学方程,并且可以使用帮助来提出适用于下面列出的第二种情况的正则表达式。

我创建了以下 Objective-C 代码来提取表单的等式,(1÷4)或者(-1÷4)如果在乘积或除数前面有一个负数:(我在这里包括这个以帮助解释我试图回答的问题)

NSString* equation = @"1+(-1÷4)";
NSString* matcher = @"(-){0,1}(\\.|\\d)+(÷|×){1,}";
    NSRegularExpression *equation_regex = [NSRegularExpression  regularExpressionWithPattern:matcher options:NSRegularExpressionCaseInsensitive error:nil];
    while([equation_regex numberOfMatchesInString:working_function options:0 range:NSMakeRange(0, [equation length])])
    {
    // regex finds '-1÷4'
}

但是,对于以下等式,这会分崩离析: 3-1÷4 其中不应提取 -1,因为它不是等式中 1÷4 的一部分。

我试图改变正则表达式(以我​​有限的正则表达式专业知识!)排除 -1 IFF 前面有一个数字 - 通过以下方式:

NSString* equation = @"3-1÷4";
NSString* matcher = @"((^\\d)(-)){0,1}(\\.|\\d)+(÷|×){1,}";
    NSRegularExpression *power_regex = [NSRegularExpression  regularExpressionWithPattern:power_regex_pattern options:NSRegularExpressionCaseInsensitive error:nil];
    while([power_regex numberOfMatchesInString:working_function options:0 range:NSMakeRange(0, [working_function length])])
    {

}

如果 - (即not )上没有前导数字,则正则表达式((^\\d)(-)){0,1}是我尝试仅匹配负数部分的地方,这不起作用,因此是问题。我希望我已经充分解释了这一点!提前致谢。1÷4-1÷4

4

1 回答 1

1

如果你想避免匹配-如果它前面有一个数字,你可以使用

"((?<!\\d)-)?[\\d.]+[÷×][\\d.]+"

尾随?是可选((?<!\\d)-)?-,如果它存在,(?<!\\d)如果它前面有一个数字,则否定的后视会阻止匹配。

[\\d.]+匹配0-9.一次或多次。

请注意,仅使用java.util.regex该类进行了测试,尽管我认为NSRegularExpression该类是相似的。

编辑:

我发现很难准确理解你想要做什么,但如果你只是想匹配一个负数,如果它前面没有数字,你可以使用

"(?<!\\d)-\\d+(\\.\\d+)?"
于 2013-02-14T09:44:22.483 回答