为什么这个简单的正则表达式不起作用

时间:2017-04-01 21:49:16

标签: scala

这是scala书中的示例代码。 该对象有一个方法可以删除给定字符串中的任何html标记。 但出于理由,它删除了整个字符串内容而不仅仅是HTML标记。我可以知道为什么吗?

object HtmlUtils {
 def removeMarkup(input: String) = {
    input.replaceAll("""</?\w[^>]*>""","")
    input.replaceAll("<.*>","")
   }
 }


val ahtmlText = "<html><body><h1>Introduction</h1></body></html>"

val anewhtmlText = HtmlUtils.removeMarkup(ahtmlText)

println(anewhtmlText)

println(s"Before removing html tags, the string was $ahtmlText and after rmoving html tags the string became $anewhtmlText")

1 个答案:

答案 0 :(得分:0)

您的第二个replaceAll不需要,并且会因.*的贪婪匹配而删除所有内容。此外,如果需要,您的第一个replaceAll可以进行推广。以下修订后的removeMarkup应该对您有用:

object HtmlUtils {
  def removeMarkup(input: String) = {
    input.replaceAll("""</?[^>]*>""", "")
  }
}

scala> val ahtmlText = "<html><body><h1>Introduction</h1></body></html>"
ahtmlText: String = <html><body><h1>Introduction</h1></body></html>

scala> val anewhtmlText = HtmlUtils.removeMarkup(ahtmlText)
anewhtmlText: String = Introduction