先行(?=
)是錯在這裏,你有沒有正確地躲過了\d
(變成\\d
)和最後但並非最不重要,你離開了量詞*
(0次或更多次),並+
(1次以上):
NSString *aTestString = @"[email protected]#[email protected]#[email protected]#$**888***";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"value=[^\\d]*(\\d+)"
options:0
error:NULL
];
[regex
enumerateMatchesInString:aTestString
options:0
range:NSMakeRange(0, [aTestString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
NSLog(@"Value: %@", [aTestString substringWithRange:[result rangeAtIndex:1]]);
}
];
編輯:這裏的一個更精細的圖案。它在=
之前捕獲一個單詞,然後丟棄非數字並在之後捕獲數字。
NSString *aTestString = @"[email protected]#[email protected]#[email protected]#$**888***";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\\w+)=[^\\d]*(\\d+)" options:0 error:NULL];
[regex
enumerateMatchesInString:aTestString
options:0
range:NSMakeRange(0, [aTestString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
NSLog(
@"Found: %@=%@",
[aTestString substringWithRange:[result rangeAtIndex:1]],
[aTestString substringWithRange:[result rangeAtIndex:2]]
);
}
];
// Output:
// Found: foo=777
// Found: bar=888
嘿,你是對的。我只是想出了您的編輯根據您的第一個幫助和即將發表評論:) 一個件事壽,我將離開圖案(值=)[^ \\ d *(\\ d +),因爲「值=「始終有保證。非常感謝您的回答。將其標記爲正確。 –