2

Sscala でテキストを解析し、正規表現を使用しています。

val imageLink = "(http?:\\/\\/.*\\.(?:png|jpg|gif|bmp|jpeg))".r.findAllIn(postText).toList
val htmlLink = "http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?"
            .r.findAllIn(postText).toList.filterNot(s => s.contains("jpg") || s.contains("jpeg")
              || s.contains("png") || s.contains("gif") || s.contains("bmp"))

しかし、これらすべての s.contains を使用したくありません。正規表現で、jpg、bmp などで終わらない http リンクを見つけたいと思います。

ありがとう

4

1 に答える 1

4

アイデアは、否定的な先読み(?!)式を使用することです。

"(?!.*(?:jpg|jpeg|png|gif|bmp))http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?"

どちらの場合も文字に対してのみ機能するため、 http(s)?->の角かっこを省略することもできます。https??s

正規表現のさらなる改善は、URL に表示される可能性のある正確な場所で拡張子をチェックすることです。

于 2013-05-01T08:05:37.553 に答える