2

(iPhone アプリの Objective-C で) 正規表現を使用して数式を一致させようとしていますが、以下にリストされている 2 番目のシナリオで機能する正規表現を考え出すのに役立つ可能性があります。

次の目的の 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])])
    {

}

正規表現((^\\d)(-)){0,1}は、 - に先頭の数字がない場合(つまり1÷4、 not -1÷4)にのみ負の部分を一致させようとする私の試みであり、機能しないため、質問です。これで十分に説明できたと思います!前もって感謝します。

4

1 に答える 1

1

数字が前にある場合の一致を避けたい場合-は、次を使用できます

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

末尾?((?<!\\d)-)?あると-オプションになり、それが存在する場合、負の後(?<!\\d)読みにより、前に数字があると一致が防止されます。

[\\d.]+一致0-9または.1 回以上。

クラスは似java.util.regexていると思いますが、クラスを使用してのみテストされていることに注意してください。NSRegularExpression

編集:

あなたがやろうとしていることを正確に理解するのは難しいと思いますが、数字が前にない場合に負の数を一致させようとしているだけの場合は、次を使用できます

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