NSPredicateでの正規表現について。その3 » サイキョウライン
ということは、この結果はどういうことなの?どう説明するの?
その2、3の方でコメントをいただいたので、コードを指定して試してみました。(うりかねぐんさんありがとうございます!)
結果は下記の様な感じです。
NSPredicate *p1 = [NSPredicate predicateWithFormat:@"self matches '\\\\u0030'"];
NSLog(@"%@", p1); //=> SELF MATCHES "\\u0030"
NSLog(@"%d", [p1 evaluateWithObject:@"0"]); //=> 1
NSLog(@"%d", [p1 evaluateWithObject:@"0"]); //=> 1
NSLog(@"%d", [p1 evaluateWithObject:@"9"]); //=> 0
NSLog(@"%d", [p1 evaluateWithObject:@"9"]); //=> 0
NSLog(@"%d", [p1 evaluateWithObject:@"A"]); //=> 0
NSLog(@"%d", [p1 evaluateWithObject:@"A"]); //=> 0
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"self matches '\\\\u0039'"];
NSLog(@"%@", p2); //=> SELF MATCHES "\\u0039"
NSLog(@"%d", [p2 evaluateWithObject:@"0"]); //=> 0
NSLog(@"%d", [p2 evaluateWithObject:@"0"]); //=> 0
NSLog(@"%d", [p2 evaluateWithObject:@"9"]); //=> 1
NSLog(@"%d", [p2 evaluateWithObject:@"9"]); //=> 1
NSLog(@"%d", [p2 evaluateWithObject:@"A"]); //=> 0
NSLog(@"%d", [p2 evaluateWithObject:@"A"]); //=> 0
「\u0030」が「0」にも「0」にもマッチしていたり、「\u0039」が「9」にも「9」にもマッチしています。
参考として0と0、9と9のコードはこちらです。
NSLog(@"\\u%04x", [@"0" characterAtIndex:0]); //=> \u0030
NSLog(@"\\u%04x", [@"0" characterAtIndex:0]); //=> \uff10
NSLog(@"\\u%04x", [@"9" characterAtIndex:0]); //=> \u0039
NSLog(@"\\u%04x", [@"9" characterAtIndex:0]); //=> \uff19
サンプルなのでselfとしていたのですが、実際は下記の様に使おうとしていまして、NSPredicateを使わない選択肢がない状態です。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code matches '.*[^\\\\u0030-\\\\u0039]+?.*"];
NSArray *hoges = [Hoge MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate];
要はcodeに半角数字以外が混じっているデータを取り出したいだけなんですが、iOS(CoreData?)的にはどうするのが相応しいのでしょうか。
NSPredicateでの正規表現について。その2 » サイキョウライン
え?なんなの?¥dと¥Dは全角半角関係ないの?どこ仕様?それどこ仕様よ?
ってことで、念のため仕様を追ってみました。
Predicate Format String Syntax
MATCHES
The left hand expression equals the right hand expression using a regex-style comparison according to ICU v3 (for more details see the ICU User Guide for Regular Expressions).
ここの「Regular Expressions」に付いてるリンクから、
Regular Expressions – ICU User Guide
\d ✓ ✓ Match any character with the Unicode General Category of Nd (Number, Decimal Digit.)
Regular Expressions – ICU User Guide
\D ✓ ✓ Match any character that is not a decimal digit.
「Unicode General Category of Nd (Number, Decimal Digit.)」ってなに?→ググる。
Unicode Characters in the ‘Number, Decimal Digit’ Category
U+0030 DIGIT ZERO 0
なるほどってことで、それぞれのコードを確認します。
NSLog(@"\\u%04x", [@"0" characterAtIndex:0]); //=> \u0030
NSLog(@"\\u%04x", [@"0" characterAtIndex:0]); //=> \uff10
んー、たしかに別物ですよねぇ。。。えぇ。。。
Unicode Characters in the ‘Number, Decimal Digit’ Category
U+FF10 FULLWIDTH DIGIT ZERO 0
。。。ん?
これもここにあるっていうことは「\d」の解釈は仕様として正しいってこと?「\d」を使ってるのがダメ?
NSPredicate *p1 = [NSPredicate predicateWithFormat:@"self matches '.*[^0-9]+?.*'"];
NSLog(@"%d", [p1 evaluateWithObject:@"1234567"]); //=> 0
NSLog(@"%d", [p1 evaluateWithObject:@"1234567"]); //=> 0
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"self matches '.*[^0-9]+?.*'"];
NSLog(@"%d", [p2 evaluateWithObject:@"1234567"]); //=> 0
NSLog(@"%d", [p2 evaluateWithObject:@"1234567"]); //=> 0
ということは、この結果はどういうことなの?どう説明するの?
えー、だいぶ混乱してまいりました。
NSPredicateでの正規表現について。 » サイキョウライン
自分の理解では万策尽きてしまったので、どなたか教えてください。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self matches '.*\\\\D+?.*'"];
NSLog(@"%d", [predicate evaluateWithObject:@"1234567"]); //=> 0
NSLog(@"%d", [predicate evaluateWithObject:@"#12345"]); //=> 1
NSLog(@"%d", [predicate evaluateWithObject:@"あいうえお"]); //=> 1
NSLog(@"%d", [predicate evaluateWithObject:@"1234A56"]); //=> 1
NSLog(@"%d", [predicate evaluateWithObject:@"1234567"]); //=> 0
某所で指摘していただいて「\\\\D+」→「.*\\\\D+?.*」として解決できそうだったのですが、新たな問題が。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self matches '.*\\\\D+?.*'"];
NSLog(@"%d", [predicate evaluateWithObject:@"1234567"]); //=> 0
NSLog(@"%d", [predicate evaluateWithObject:@"1234567"]); //=> 0
え?なんなの?¥dと¥Dは全角半角関係ないの?どこ仕様?それどこ仕様よ?
Lenovo、BIOSプログラムの脆弱性に対処 「迷惑ウェア」の指摘も – ITmedia エンタープライズ
一方、ThinkブランドのPCにはインストールされていないという。
ThinkPadユーザとしてはとても気になるところなんだけれど、公式コメントが欲しい。
ThinkPadの米沢生産モデル | レノボジャパン
2015年2月より、NECパーソナルコンピューター米沢工場(山形県)にてThinkPadの国内生産を開始します。米沢工場は徹底した部品受入検査をはじめこだわりぬいた品質管理の下、30年以上PCを生産しつづけています。
ThinkPadが信じられなくなるのはホント困る。
自分の理解では万策尽きてしまったので、どなたか教えてください。
Rubyで書くとこのようになる判断(1つめのみfalse)をしたいのですが、思い通りの結果にならなくて悩んでます。
reg = /\D+/
reg =~ '1234567' #=> nil
reg =~ '#12345' #=> 0
reg =~ 'あいうえお' #=> 0
reg =~ '1234A56' #=> 4
Objective-Cではこのように書いているのですが、3つめ以外はNOになります。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self matches '\\\\D+'"];
NSLog(@"%d", [predicate evaluateWithObject:@"1234567"]); //=> 0
NSLog(@"%d", [predicate evaluateWithObject:@"#12345"]); //=> 0
NSLog(@"%d", [predicate evaluateWithObject:@"あいうえお"]); //=> 1
NSLog(@"%d", [predicate evaluateWithObject:@"1234A56"]); //=> 0
Rubyで書いたのと同じ結果にするには、どの様に書いたらいいのでしょうか。
1週間のラジオ番組ネットで提供 ラジコ、年内にも無料で – 47NEWS(よんななニュース)
民放ラジオ各局の過去1週間の番組をインターネットで提供、スマホやパソコンで聴けるようにする無料のサービスを、放送局や広告代理店でつくる「radiko(ラジコ)」社(東京)が年内にも始めることが8日、複数の関係者への取材で分かった。
すばらしい。ラジオ興味あるけど、どれから聴いたらいいのって方のためにオススメ一覧置いておきますね。