2011-07-06 14 views
4

の形式でスキャンする方法NSScannerで次の正規表現をスキャンしようとしています:[a-zA -Z _] [a-zA-Z0-9 _] *ですが、難しかったです。NSScannerを使用して^ [a-zA-Z _] [a-zA-Z0-9 _] *

私は最初にa-Z_を読んでから、-Z0-9_を追加しようとすることができます。

もっと簡単で効率的な方法があるのだろうかと思います。ありがとうございます。


説明: 正規表現を実行しようとしていません。私は上記の正規表現のような文字列を読み込もうとしています。 Cスタイルの変数に似たもの。基本的には任意の英数字ですが、数字で始めることはできません。


は明確化2:私は読み取るスキャナを持ってしようとしている は([]各トークン読み取り示す): "テスト3" [TEST3] 」として[試験3] "TEST3" として 3 TEST3 " "[、3、3、試験] として" 3 3test "[試験、3] として" _3試験 "[_3test] として" _3test「[3、試験] として" 3test [_、3、test3]として

+0

コードを投稿してください。また、なぜ正規表現文字列をスキャンしようとしていますか?あなたがやろうとしていることをするより良い方法があるかもしれません。 –

+0

正規表現を解析しようとしていますか、正規表現が行うのと同じことをしますか? –

+0

@Peter:私はただスキャンを達成しようとしています(正規表現と同じことです)。正規表現が私がよりよくスキャンしようとしていることを説明すると考えました。 – David

答えて

3

を配列、辞書をあなたの文字列の谷より簡単に正規表現を適用することができます。

目を使用して

英字と数字だけでなく、すべての英字と数字をUnicodeで一致させることができます。あなたが本当にそれらのより小さいセットだけを望むなら、それはcharacterSetWithCharactersInString:および/またはcharacterSetWithRange:を使用して構築するのに十分簡単です。後者の方法を使用する場合は、NSMutableCharacterSetとunionを別の文字セットにする必要があります。

キャラクタセットを取得したら、scan characters only characters within a setに簡単にアクセスしてから、必要に応じてconcatenate one string onto the otherにしてください。

+0

これで私の問題は解決しません。例えば、次の文字列を取る: "this 3 will fail"。あなたの方法によると、 "this 3"が "this 3"と等しいかどうかを判断する方法はありません。私は整数を取得するかどうか、そしてそれがスペース(または他のスキップされた文字)で区切られているかどうかを知らずに、スペースを調べます。 – David

+0

@David:これは、あなたが質問した質問とは関係がありません。正規表現にはスペースが含まれていませんでした。それにもかかわらず、あなたはNSScannerを使って、異なる文字セットでそれを行うことができます。自動的にスペースを食べたくない場合は、スキャナのスキップ文字セットを空のキャラクタセットに設定することを忘れないでください。 –

+0

ポイントは、その正規表現のように機能することです。空白をスキップしたくないのですが、 "テスト"と "3"の間に空白がある場合は、 "テスト3"も読みたくありません。しかし、あなたの説明では、それだけでそれができます。 – David

1

あなたがしたいことによって異なります。 あなたは正規表現を使用したい場合は、私はこのフレームワークを聞いた: RegexKit

あなたは、2つの文字セットが必要になります...など、

関連する問題