簡體   English   中英

iOS - NSString正則表達式匹配

[英]iOS - NSString regex match

我有一個字符串例如:

NSString *str = @"Strängnäs"

然后我使用一個方法用*替換斯堪的納維亞字母,所以它將是:

NSString *strReplaced = @"Str*ngn*s"

我需要一個函數來匹配strstrReplaced 換句話說, *應該被視為任何字符( *應該與任何字符匹配)。

我怎樣才能做到這一點?

Strängnäs should be equal to Str*ngn*s

編輯:

也許我不夠清楚。 我希望*被視為任何角色。 所以當做[@"Strängnäs" isEqualToString:@"Str*ngn*s"]它應該返回YES

我認為以下正則表達式模式將匹配所有非ASCII文本,考慮到斯堪的納維亞字母不是ASCII:

[^ -~]

分別處理每一行以避免匹配換行符並將匹配替換為*。

演示: https//regex101.com/r/dI6zN5/1

編輯:

這是基於上述模式的優化模式:

[^\000-~]

演示: https//regex101.com/r/lO0bE9/1

編輯1:根據您的評論,您需要一個UDF(用戶定義的函數):

  • 采用斯堪的納維亞字符串
  • 將所有斯堪的納維亞字母轉換為*
  • 用星號接收字符串
  • 比較兩個字符串
  • 如果兩個字符串匹配則返回True ,否則返回false。

然后,您可以像CompareString(ScanStr,AsteriskStr)一樣使用UDF。

我使用JLILI Amen發布的正則表達式創建了一個代碼示例

NSString *string = @"Strängnäs";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^ -~]" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
NSLog(@"%@", modifiedString);

產量

Str*ngn*s

不確定你到底是什么,但也許這會有所幫助。

匹配任何東西的正則表達式模式是. (點),所以你可以用strReplaced替換*來創建一個模式. 的:

NSString *pattern = [strReplaced stringByReplacingOccurencesOfString:@"*" withString:"."];

現在使用NSRegularExpression您可以從pattern構造一個正則表達式,然后查看str匹配它 - 請參閱所需方法的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM