正規表現の学習の例

記事ではOCを例に挙げていますが、正規表現は言語を区別せず、記事のルールは他の言語でも共通です。

最近、文字列内の特別な文字列に一致する必要があります。形式は<at open_id = "" user_id = ""> nickname </ at>です

私が書いた規則性は次のとおりです。

NSString *Regex =@"<at open_id=\"\\w{16}\" user_id=\"\\w{32}\">.{1,10}</at>";

段階的な分析では、形式の前半は固定されています。<at open_id = \ "\" open_idの値は16桁または文字であるため、\ wは数字または文字を意味するため、\ w {16}を使用します。

「\」はiOSではエスケープする必要があるため、もう1つ\

このように、同じように、user_id制限は32ビットです。

次にニックネームがあり、これは1〜10桁で一致します。.{1,10}を使用します。ここで、「。」はすべての文字を表します

これで完全な式が書き出されます

テストコード:

NSString *str = @"你好瘦猪 <at open_id=\"02PZgYL03okoqnjE\" user_id=\"bf94c94235d311ea9c80acde48001122\">瘦猪</at>你好胖猴<at open_id=\"02PZgYL03okoqnjE\" user_id=\"bf94c94235d311ea9c80acde48001122\">胖猴</at>";

 方法:

    NSError *error;
   NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:Regex
                                                                          options:NSRegularExpressionCaseInsensitive
                                                                            error:&error];
       // 执行匹配的过程
   NSArray *matches = [regex matchesInString:str
                                     options:NSMatchingReportCompletion
                                       range:NSMakeRange(0, [str length])];
   for (NSTextCheckingResult *match in matches) {
       NSLog(@"%@",[str substringWithRange:match.range]);
   }

結果:

マッチには2つの要素があり、正しい位置が出力されます。

これを見れば基本的に簡単な正規表現を書くことができます。

その他のルールは次のとおりです。

特殊記号「^」と「$」。それらの機能は、文字列の最初と最後を別々に指摘することです。文字列全体から部分文字列が見つかった場合、これら2つの規則は必要ありません。完全な文字列が規則を満たすかどうかを判断する場合は、それが使用されます。

任意の文字に
一致:。文字と数字に
一致:\ w 数字に一致:\ d
空白文字に一致:\ s

 

"Ab *":文字列にaの後に0個以上のb( "a"、 "ab"、 "abbb"、...)が続くことを示します。

"Ab +":文字列にaがあり、その後に少なくとも1つ以上のbが続くことを示します( "ab"、 "abbb"、...);

"Ab?":文字列にaの後にゼロまたはb( "a"、 "ab")が続くことを示します。

"A?b + $":文字列の最後にゼロまたは1つのaがあり、その後に1つまたはいくつかのbがあることを示します( "b"、 "ab"、 "bb"、 "abb"、...)。

"Ab {4}":文字列にaの後に4 bが続くことを示します( "abbbb");

"Ab {1、}":文字列にaとそれに続く少なくとも1つのbがあることを示します( "ab"、 "abb"、 "abbb"、...);

"Ab {3,4}":文字列にaの後に3〜4 bsが続くことを示します( "abbb"、 "abbbb")。

その場合、「*」は{0、}で表すことができ、「+」は{1、}で表すことができ、「?」は{0、1}で表すことができます。

 

「|」は「or」操作を意味し、中学校を卒業したすべての人が知っています。

"A | b":文字列に "a"または "b"があることを示します。

「(A | bcd)ef」:「aef」または「bcdef」を意味します。

"(A | b)* c": "a"と "b"を "c"と組み合わせた文字列を意味します。

 

大括弧「[]」は、大括弧内の多くの文字が満たす必要がある条件を次のように示します。

"[Ad]":文字列に小文字の「a」から「d」のいずれかが含まれていることを示します(「a | b | c | d」または「[abcd]」と同等)。

"^ [a-zA-Z]":文字で始まる文字列を表します。

「[0-9] a」:aの前の数字を意味します。

 

備考:

上記の例では、配列を返す正規表現クラス(NSRegularExpression)を使用しています。

このメソッドは、最初に一致した部分文字列の位置情報を返します

正規表現ルールを満たす完全な文字列内の部分文字列の位置を取得します。

    NSRange range = [str rangeOfString:Regex options:NSRegularExpressionSearch];
    if (range.location != NSNotFound) {
        NSLog(@"range :%@", [str substringWithRange:range]);
    }

完全な文字列が正規表現メソッドに準拠しているかどうかを判断し、ブール値を返します。

- (BOOL)validateNumber:(NSString *) textString
{
 NSString* number=@"^[0-9]+$";
 NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];
 return [numberPre evaluateWithObject:textString];
}

 

公式アカウントのITの美学に注意を払い、より興味深いテクノロジーを入手する

おすすめ

転載: blog.csdn.net/bitcser/article/details/105330136