例:言葉の文字列が言葉で終わるかどうかをどうやって判断できますか?
`Hello @john` -> true
`Hello @john ` -> false
`Hello @john.` -> false
`Hello @john i` -> false
例:言葉の文字列が言葉で終わるかどうかをどうやって判断できますか?
`Hello @john` -> true
`Hello @john ` -> false
`Hello @john.` -> false
`Hello @john i` -> false
する正規表現を試してみてください:@\p{L}+(?:$|\n)
\p{L} -> Match matches any kind of letter from any language
$ -> Match End of the string
この正規表現は、ASCII文字にマッチするだけではありません。ICUの短縮形クラスはUnicode対応です。また、文字列の最後に '@_____ 'とマッチします。さらに、この正規表現は '' @Вася\ n "'のような文字列に対して* true *を出力します。言及は改行で続き、文字列の最後にはありません。 '@ \ w + $'は**間違った解決策です**。 @Ashraful、修正または削除してください。 –
@WiktorStribiżew良いキャッチ。 –
BTW、PCREデモへのリンクを提供しても正規表現が動作しないことを証明していないので、regex101.comはICU正規表現フレーバをサポートしていません。 –
あなたはそれが説明に示したパターンを持つユーザーの言及のための文字列を検証したい場合拡張機能を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 | @Вася
|
質問は何ですか?あなたは詳しく説明できますか? –
あなたは何を意味するのか正確に定義できますか? – RiggsFolly