2017-06-06 11 views

答えて

1

する正規表現を試してみてください:@\p{L}+(?:$|\n)

\p{L} -> Match matches any kind of letter from any language 
$  -> Match End of the string 

ライブデモ:https://regex101.com/r/m9du5M/2

+2

この正規表現は、ASCII文字にマッチするだけではありません。ICUの短縮形クラスはUnicode対応です。また、文字列の最後に '@_____ 'とマッチします。さらに、この正規表現は '' @Вася\ n "'のような文字列に対して* true *を出力します。言及は改行で続き、文字列の最後にはありません。 '@ \ w + $'は**間違った解決策です**。 @Ashraful、修正または削除してください。 –

+0

@WiktorStribiżew良いキャッチ。 –

+0

BTW、PCREデモへのリンクを提供しても正規表現が動作しないことを証明していないので、regex101.comはICU正規表現フレーバをサポートしていません。 –

1

あなたはそれが説明に示したパターンを持つユーザーの言及のための文字列を検証したい場合拡張機能をStringに書き込む方がよいでしょう。それによってデータが検証されます。

試してみてください。

extension String { 
    func mention() -> Bool { 
     let pattern = "@[a-zA-Z]+$" 
     guard let _ = self.range(of:pattern, options: .regularExpression) else { 
      return false 
     } 
     return true 
    } 
} 

テストケース:

let input = ["Hello @john", "Hello @john ", "Hello @john.", "Hello @john i,", "@_____", "@Вася\n"] 

for item in input { 
    if !item.mention() { 
     print("Failed to get mention at | \(item) |") 
    } 
} 

検証:

Failed to get mention at | Hello @john | 
Failed to get mention at | Hello @john. | 
Failed to get mention at | Hello @john i, | 
Failed to get mention at | @_____ | 
Failed to get mention at | @Вася 
| 
関連する問題