2017-12-22 6 views
1

現在、一致するハッシュタグの文字数を制限しようとしています。 ハッシュタグが25文字未満の場合にのみ一致させたいと思います。ハッシュタグ正規表現の上限文字数

私は(制限なし)持っているもの、この:

regex = [[NSRegularExpression alloc] initWithPattern:@"(#+[\\S\\_]+)?" options:0 error:&error]; 

は、私は成功せず、そのようなことを試してみました:私はそのようなコードを起動すると

regex = [[NSRegularExpression alloc] initWithPattern:@"(#+[\\S\\_]{0,10})?" options:0 error:&error]; 

、ハッシュタグが一致しているが、彼らはカットされます。

enter image description here

私は、ハッシュタグは26文字以上であれば、全く一致していませんしたいと思います。 {0,10}の後に$を追加しようとしましたが、機能しません。

+1

一致する部分が_not_に続いて別の '[\ S \ _]'が続くことを確認するネガティブな先読みを追加しますか? (私はこれを試していませんでした。なぜなら、Cocoaの正規表現APIは簡単なテストのために壊れているからです。) – zoul

答えて

0

私は、これは動作するはずだと思う:

let pat = "^#[^#\\s]{1,10}$" 
let testStr = "#asd" 
let regex = try! NSRegularExpression(pattern: pat, options: []) 
let matches = regex.matches(in: testStr, options: [], range: NSRange(testStr.startIndex..., in: testStr)) 

matches.count 
+0

NSRangeの作成に 'string.count'を使用しないでください。もしEmojisが文字列に含まれていれば間違っていますまたはその他のUnicode文字> U + FFFF。 https://stackoverflow.com/questions/27880650/swift-extract-regex-matchesを比較してください。 –

+0

提案していただきありがとうございます。 – Vyacheslav

+0

あなたの答えは大変ありがとうございますが、KILabel(私が使用しているフレームワーク)はObjective-Cにあると思われますので、ファイル内で使用することはできません:/ – KevinB

0

あなたは、次の正規表現を使用可能性があります

initWithPattern:@"#\\S{1,25}(?!\\S)" 

regex demoを参照してください。

詳細

  • #から#シンボル
  • \S{1,25}から1〜25の非空白文字
  • (?!\S) - ない非空白文字は、現在位置のすぐ右側に許されません。

正規表現エンジンが#に一致する、次いで(少ない場合、それはより少ない一致するようにバックトラックしますが、少なくとも1の非空白文字)25非空白文字を取得しようとした後にしようとします空白以外の文字の後に空白または文字列の終わりがあると主張します。

関連する問題