2016-06-19 4 views
1
pattern = @"(\\$.*?\\$)"; 
regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; 
matches = [regex matchesInString:self options:0 range: searchedRange]; 
for (NSTextCheckingResult* match in matches) { 
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:[match range]]; 
} 

私は上記のコードを使用して2つのドル記号の間にテキストを表示しています。だから、次の文字列でハローワールドテキストを削除ドル記号で、青色に着色されます:

@"This won't be blue. $hello world$. This won't be blue"; 

は今、しかし、私は青着色することがないように、単一のドル記号をしたいです。最初のドル記号がa-zA-Z0-9の文字に続いて、同様に2番目のドル記号の前にa-zA-Z0-9の文字が続くはずです。これどうやってするの?

+0

ドルの間の内容は1文字にすることができますか? – rock321987

答えて

1

移動キャプチャグループ最初$後と最後の$前のビットのためのトリスタンへpattern = @"(\\$[a-zA-Z0-9]{1}.*\\$)";

感謝をしたい何を信じて、そしてグループ1のみ取得にmatchAtIndex:1を使用します値:

pattern = @"\\$([A-Za-z0-9].*?)(?<=[A-Za-z0-9])\\$"; 
      ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ 

そして

[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:[match matchAtIndex:1]]; 

パターンの詳細:

  • \\$ - リテラル$
  • ([A-Za-z0-9].*?) - 文字または数字0+任意の文字と続くが、改行できるだけ少ないとして最初
  • 件まで
  • (?<=[A-Za-z0-9])\\$ - $文字または数字が前に付いています

数字Rの文字が最初$後に表示され、最初の$は文字または数字ではなく_に続くことができる

pattern = @"\\$\\b(?!_)(.*?)\\$"; 

を使用しています。

0

正規表現を少し調整するだけでよいでしょう。

本当に良いリソースはhttp://regexr.com/です。新しい表現を試してみることができるからです。

pattern = @"(\\$.+\\$)"; 

*と+の違いは+は、少なくとも1つの文字を必要とすることである:あなたはおそらくしたい。この特定のケースでは

。また? *はデフォルトで何かを任意にするため、何もしていませんでした。

+0

しかしこれでも空白文字は – Apollo

+0

ああ、私はそのビットを逃した、あなたはちょうどを置き換える必要があります。質問で指定したもので[ –

+0

] [OK]完璧に囲まれています。ありがとう:) – Apollo

0

は、私は、これは私がリソース

+0

あなたは '(?<= \\ $)(?= [A-Za-z0-9])[^ $] *(?= \\ $)' – rock321987

+0

@ rock321987を実際に試してみることができます。働いた。 – Apollo

関連する問題