1. 程式人生 > >在iOS開發中使用正則表示式分解字串

在iOS開發中使用正則表示式分解字串

例:將下列字串中方括號[]中的內容提取出來並形成一個Array:

NSString* entry = @"[field1] [field2] [field3] [field4] [field5]";

解法一:使用componentsSeparatedByString:方法分解:

    NSArray *rawFields = [entry componentsSeparatedByString:@"] ["];
    NSMutableArray *fields = [NSMutableArray arrayWithArray:rawFields];

    //Remove '[' from the first field
NSString* firstRawField = [rawFields[0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; if([firstRawField hasPrefix:@"["] && [firstRawField length] > 1){ [fields replaceObjectAtIndex:0 withObject:[firstRawField substringFromIndex:1]]; } //Remove ']' from the last field
NSString* lastRawField = [rawFields[rawFields.count - 1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; if([lastRawField hasSuffix:@"]"] && [lastRawField length] > 1){ [fields replaceObjectAtIndex:(rawFields.count - 1) withObject:[lastRawField substringToIndex:[lastRawField length] - 1
]]; }

解法二:使用正則表示式分解:

    __block NSMutableArray *fields = [[NSMutableArray alloc] init];
    NSError *error = NULL;
    NSRegularExpression *fieldRegularExpression = [NSRegularExpression
                                                         regularExpressionWithPattern:@"\\[[^\\]]*\\]"
                                                         options:NSRegularExpressionCaseInsensitive
                                                         error:&error];
    [fieldRegularExpression enumerateMatchesInString:entry options:0 range:NSMakeRange(0, [entry length]) 
    usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
        if(match.range.length > 2) {
            NSRange range = NSMakeRange(match.range.location + 1, match.range.length - 2);  //Remove '[' and ']'
            [fields insertObject:[entry substringWithRange:range] atIndex:fields.count];
        } else {
            [fields insertObject:EMPTY_STRING atIndex:fields.count];
        }

    }];

這裡,正則表示式

@"\\[[^\\]]*\\]"

的意義為左右方括號中包含任意長度的字串,且字串不含右方括號’]’。
複習:正則表示式中,’\’代表轉義字元,’[^list]’代表不含的字符集,’*’代表重複0到無窮多個前一個字元。

相關推薦

iOS開發使用表示式分解字串

例:將下列字串中方括號[]中的內容提取出來並形成一個Array: NSString* entry = @"[field1] [field2] [field3] [field4] [field5]"; 解法一:使用componentsSeparatedBy

iOS開發表示式快速教程(NSPredicate、NSRegularExpression)

1、校驗密碼強度 密碼的強度必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在8-10之間 ^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 2、校驗中文 字串只能是中文 ^[\\u4e00-\\u9fa5]{0,}$ 3、由數字,26個英文字母或下劃線

在Python使用表示式去掉字串裡的html標籤

有時候會獲得一些帶html標籤的字串,需要把html標籤去掉,獲得乾淨的字串,這時候可以使用正則表示式。 程式碼如下: import re htmeString = '''    <ul id="TopNav">    &nbs

php表示式 剔除字串的除了漢字的字元(只保留漢字)

1)utf-8的編碼格式,匹配中文程式碼如下: <?php     $str = "utf-8下匹配出中文字串";     $preg = "/[\x{4e00}-\x{9fa5}]+/u";     if(preg_match_all($preg,$str,$mat

java利用表示式提取字串的整數和小數部分

最近開發遇到一個新的東西,就是前端傳過來一個字串,需要將裡面的數字提取出來,倒騰了一天,最後還是沒有倒騰出來,最後還是借鑑大佬的方法。記錄一下。 首先是前端傳來的字串“小明通過掃碼向你付款100000.566元”其中暱稱和金額不是固定的,其他是固定的。 於是便考慮使用“通過掃碼向你付

python表示式字串提取數字

python從字串中提取數字 使用正則表示式,用法如下: ## 總結 ## ^ 匹配字串的開始。 ## $ 匹配字串的結尾。 ## \b 匹配一個單詞的邊界。 ## \d 匹配任意數字。 ## \D

java 利用表示式去處字串的所有空格

轉載自xcmercy的部落格 目標 去除字串中所有的空白字元,包括空格、製表符、回車符等所有空白字元 思路 根據字串長度,利用迴圈遍歷字串此方法太笨拙。這裡利用正則表示式,匹配所有的空白字元,然後將匹配到的空白字元替換為 “” 空串即可。 程式碼 private St

利用表示式去除字串的空格

\s* 表示若干個空格(可以是0個)。 \s+ 表示一個或多個空格 public class Test { public static void main(String[] args) {

表示式擷取字串的數字

方法一: String str="fsdfdsf12315f15哈12的"; String regEx="[^0-9]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); String n

java-使用表示式擷取字串的時間資訊

package com.yr.method; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Aut

使用表示式字串查詢子字串

直接上程式碼: String string = "asdasd#_%12.gifdadsa#_%2324.gif"; String regx = "#_%\\d+.gif"; Patter

表示式取出字串的數字

public static void main(String[] args) {String a="love23next234csdn3423javaeye";String regEx="[^0-9]";  Pattern p = Pattern.compile(regEx)

表示式判斷字串是否有漢字

String ChineseCharactersStr = “這裡是漢字也有yingwen”; 需要匯入 import java.util.regex.Matcher; import java.u

Js 表示式匹配字串是否含有中文

通常在特定的情景裡,有的字串是不允許存在中文字元的,因此我們可以通過正則表示式來匹配。廢話不多說,上程式碼。 JS: function checkChinese(obj_val){ var reg = new RegExp("[\\u4E

php使用表示式提取字串尖括號、小括號、括號、大括號字串

</pre><p>PHP使用正則表示式提取字串中尖括號<>、小括號()、中括號[]、大括號{}中的字元示例,需要的朋友可以參考下</p><p>

Python 表示式匹配字串的http連結

利用Python正則表示式匹配字串中的http連結。主要難點是用正則表示出http 連結的模式。 import re pattern = re.compile(r'http[s]?://(?:[a-z

舉例說明在android使用表示式去掉字串標點符號及其他一些特殊符號的方法

在android中使用正則表示式與在java中使用正則表示式是有區別的,比如使用正則表示式去掉一個字串中的標點符號及一些特殊符號時,在java中可以使用的方法是: public static String format(String s){   String str=s.r

表示式去除字串的首尾空格,合併字串的多個空格為一個

今天維護一個簡單的搜尋功能:需求是可以多詞高亮搜尋,那好吧,無非把輸入的字串拆分成一個數組。然後把搜尋到的內容中的這個詞高亮。 1、字串處理 var searchTest=" 你好 妹妹 哎呀 不要啦 "; //去除開頭空格 searc

php 表示式詳解

概述 正則表示式是一種描述字串結果的語法規則,是一個特定的格式化模式,可以匹配、替換、擷取匹配的字串。常用的語言基本上都有正則表示式,如JavaScript、java等。其實,只有瞭解一種語言的正則使用,其他語言的正則使用起來,就相對簡單些。文字主要圍繞解決下面問題展開。 有哪些常用的

Python表示式re.match的用法

re.match(pattern, string, flags) 第一個引數是正則表示式,如果匹配成功,則返回一個Match,否則返回一個None; 第二個引數表示要匹配的字串; 第三個引數是標緻位,用於控制正則表示式的匹配方式,如:是否區分大小寫,多行匹配等等。 需要特別注意的是,這個方法並不是完