2016-06-21 8 views
1

{文字の前にあるすべてのテキストを同じ行にキャプチャする正規表現を書くにはどうすればよいですか?{文字の前にすべてのテキストをキャプチャする正規表現 - Objective C

私は、次のようなものを試してみました:

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 colorFromHexString:@"#C41A16"] range:[match range]]; 
} 

私はPが着色されており、Aが着色されるように、次のCSSコードのスタイルをしようとしている:

p { 
    color: blue; 
} 

a { 
    color: red; 
} 
+0

ところで、あなたは、以前の正規表現の質問をチェックしましたか? –

+0

これを行う必要はありませんが、これをCSSで動作させたい場合は、 '@ 'で始まるマッチ(' @ media'や '@ font-face'など)を拒否することもできます。セレクタが '}'と '{'(または文字列の先頭)の間を見て同じ行にあることを許可します – 4castle

+1

@WiktorStribiżewあなたの答えを受け入れました。 – Apollo

答えて

1

どのようにでしょう{の前にすべてのテキストをキャプチャする正規表現を書きますが、同じ行にありますか?

使用

pattern = @"(?m)^([^{\r\n]*)\\{"; 

は、これが唯一の一致と捉える線の一部を開始してから最初の{までと{自身にマッチしますします。 [^{\r\n]ネゲートされた文字クラスは、{、CRおよびLF以外の文字にのみ一致します。

あなたが先読みを使用することができます({除く)のみ{前にテキストを一致させるにはregex demo

を参照してください:

pattern = @"(?m)^[^{\r\n]*(?=\\{)"; 
          ^^^^^^^ 

another regex demo

を参照してください。そして最後に、あなたはまた、「トリムも"怠惰な*?量指定子の助けを借りて一致し、先読みの内部に*(0以上のスペース):

pattern = @"(?m)^[^{\r\n]*?(?= *\\{)"; 

しかしanother demo

+1

私はこれを2回upvoteしたいと思います、Wiktor。先読みしたいことを含めるのを忘れていましたが、その質問にも先制的に答えました!ありがとう。 – Apollo

関連する問題