2013-05-01 45 views
2

我解析文本Sscala和使用正则表达式:正则表达式,HTTP链接未URL图像

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

的想法是使用负前瞻(?!)表达式:

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

您也可以省略括号http(s)? - >https?因为?将只在两种情况下s字符工作。

正则表达式的进一步改进将检查扩展的确切位置,它可能出现在URL中。