我有一個正則表達式的任務。我有一個不同模式的NSRegularExpression
對象列表。另外我有一個NSString
對象來定義一個源。我需要找到其中正則表達式(來自給定列表)匹配源的BEGINNING。Objective-C在字符串中查找第一個匹配的正則表達式
有沒有辦法用Objective-C?
例如:
表達式圖案
[a-z]
[A-Z]
[1-9]
源
Hello32
結果
表達無2適合,因爲信H
對源代碼的開始。
我有一個正則表達式的任務。我有一個不同模式的NSRegularExpression
對象列表。另外我有一個NSString
對象來定義一個源。我需要找到其中正則表達式(來自給定列表)匹配源的BEGINNING。Objective-C在字符串中查找第一個匹配的正則表達式
有沒有辦法用Objective-C?
例如:
表達式圖案
[a-z]
[A-Z]
[1-9]
源
Hello32
結果
表達無2適合,因爲信H
對源代碼的開始。
您可以在每個模式上加上\A(?:
並附加)
以強制它們在字符串的開始處匹配。如實施例所提供的圖案將成爲:
\A(?:[a-z])
\A(?:[A-Z])
\A(?:[1-9])
\A
是錨定至串的beggining(方法類似於^
當Multiline
標誌沒有被設置)。你爲什麼不試試呢?
NSString *testString = @"Hello";
NSArray *patterns = @[
@"[a-z]",
@"[A-Z]",
@"[1-9]",
];
for (NSString *pattern in patterns) {
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:0
error:NULL];
BOOL matchAtStart = [regex rangeOfFirstMatchInString:testString
options:0
range:(NSRange){0, testString.length}].location == 0;
NSLog(@"'%@': %@", pattern, @(matchAtStart));
}
定義「源的開始」。如果我理解正確,可以逐個嘗試每個NSRegularExpression,獲取matchRange,如果matchRange通過測試,則將其添加到「成功」列表中。 – Larme
用示例更新了我的問題。 –
你可以在每個模式上加上'^'以強制匹配從開始 – Mariano