Trong tiếng Do Thái, có một số nguyên âm nhất định mà NSPredicate không bỏ qua ngay cả khi sử dụng công cụ sửa đổi 'd' (dấu phụ không phân biệt) trong biến vị ngữ. Tôi đã nói rằng giải pháp là sử dụng các biểu thức thông thường để thực hiện tìm kiếm.Làm cách nào để sử dụng regex để tìm kiếm bỏ qua các ký tự nhất định bằng NSPredicate?
Làm cách nào để lấy chuỗi tìm kiếm và "sử dụng regex" để tìm kiếm văn bản hebrew có chứa nguyên âm, bỏ qua các nguyên âm đó?
Edit:
Nói cách khác, Nếu tôi muốn tìm kiếm các văn bản sau đây, bất chấp dấu gạch ngang và dấu sao, làm thế nào tôi làm như vậy sử dụng regex?
Ví dụ Text:
tôi w-en * t t-o st * o * r * -e vâng-ster * ngày.
Chỉnh sửa 2:
Về cơ bản, tôi muốn:
- Tham dự một chuỗi đầu vào từ một người dùng
- Hãy chuỗi để tìm kiếm
- Dùng regex dựa trên chuỗi tìm kiếm của người dùng để tìm kiếm các kết quả "chứa" trong khối văn bản lớn hơn. Các regex nên bỏ qua nguyên âm như được hiển thị ở trên.
Sửa 3:
Đây là cách tôi đang thực hiện tìm kiếm của tôi:
//
// The user updated the search text
//
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString{
NSMutableArray *unfilteredResults = [[[[self.fetchedResultsController sections] objectAtIndex:0] objects] mutableCopy];
if (self.filteredArray == nil) {
self.filteredArray = [[[NSMutableArray alloc ] init] autorelease];
}
[filteredArray removeAllObjects];
NSPredicate *predicate;
if (controller.searchBar.selectedScopeButtonIndex == 0) {
predicate = [NSPredicate predicateWithFormat:@"articleTitle CONTAINS[cd] %@", searchString];
}else if (controller.searchBar.selectedScopeButtonIndex == 1) {
predicate = [NSPredicate predicateWithFormat:@"articleContent CONTAINS[cd] %@", searchString];
}else if (controller.searchBar.selectedScopeButtonIndex == 2){
predicate = [NSPredicate predicateWithFormat:@"ANY tags.tagText CONTAINS[cd] %@", searchString];
}else{
predicate = [NSPredicate predicateWithFormat:@"(ANY tags.tagText CONTAINS[cd] %@) OR (dvarTorahTitle CONTAINS[cd] %@) OR (dvarTorahContent CONTAINS[cd] %@)", searchString,searchString,searchString];
}
for (Article *article in unfilteredResults) {
if ([predicate evaluateWithObject:article]) {
[self.filteredArray addObject:article];
}
}
[unfilteredResults release];
return YES;
}
Sửa 4:
Tôi không nhất thiết phải sử dụng regex cho điều này, đã được khuyên nên làm như vậy. Nếu bạn có một cách khác hoạt động, hãy tìm nó!
Sửa 5:
Tôi đã sửa đổi tìm kiếm của tôi trông như thế này:
NSInteger length = [searchString length];
NSString *vowelsAsRegex = @"[\\u5B0-\\u55C4]*";
NSMutableString *modifiedSearchString = [searchString mutableCopy];
for (int i = length; i > 0; i--) {
[modifiedSearchString insertString:vowelsAsRegex atIndex:i];
}
if (controller.searchBar.selectedScopeButtonIndex == 0) {
predicate = [NSPredicate predicateWithFormat:@"articleTitle CONTAINS[cd] %@", modifiedSearchString];
}else if (controller.searchBar.selectedScopeButtonIndex == 1) {
predicate = [NSPredicate predicateWithFormat:@"articleContent CONTAINS[cd] %@", modifiedSearchString];
}else if (controller.searchBar.selectedScopeButtonIndex == 2){
predicate = [NSPredicate predicateWithFormat:@"ANY tags.tagText CONTAINS[cd] %@", modifiedSearchString];
}else{
predicate = [NSPredicate predicateWithFormat:@"(ANY tags.tagText CONTAINS[cd] %@) OR (dvarTorahTitle CONTAINS[cd] %@) OR (dvarTorahContent CONTAINS[cd] %@)", modifiedSearchString,modifiedSearchString,modifiedSearchString];
}
for (Article *article in unfilteredResults) {
if ([predicate evaluateWithObject:article]) {
[self.filteredArray addObject:article];
}
}
Tôi vẫn đang thiếu một cái gì đó ở đây, những gì tôi cần phải làm gì để làm cho công việc này?
Sửa 6:
Được rồi, gần như ở đó. Tôi cần thực hiện thêm hai thay đổi để hoàn thành việc này.
Tôi cần có thể thêm các dải ký tự khác vào regex, có thể xuất hiện thay cho hoặc ngoài ký tự trong tập hợp khác. Tôi đã thay đổi phạm vi đầu tiên thành điều này:
[\u05b0-\u05c, \u0591-\u05AF]?
Điều gì đó cho tôi biết điều này là không chính xác.
Ngoài ra, tôi cần phần còn lại của regex không phân biệt chữ hoa chữ thường. Tôi cần sử dụng công cụ sửa đổi nào để sử dụng với regex .*
để làm cho nó không phân biệt chữ hoa chữ thường?
bản sao có thể có của [NSPredicate và Regex] (http://stackoverflow.com/questions/2458881/nspredicate-and-regex) –
Có thể là: 1. Xóa ký hiệu xấu (nguyên âm). 2. Thêm một cái gì đó như thế này: ". *?" sau mỗi nhân vật. 3. Tìm kiếm. Bạn có chấp nhận quyết định như vậy không? – Nekto