代码之家  ›  专栏  ›  技术社区  ›  lannyf

Kotlin,如何在HTML中查找iframe标记与特殊src的匹配

  •  0
  • lannyf  · 技术社区  · 5 年前

    希望从HTML内容中检测具有特殊SRC的iframe标记

    <iframe width="100% !important" height="800px" src="//specical.com/external/widget/api.php?height=800px&amp;width=640px&amp; blablabal" ...... ></iframe>
    

    唯一值得关注的是:

    它是一个iframe,有src=“//specical.com/external/widget/api.php吗?,并且SRC部分可以放置在iframe字符串的不同位置。
    不关心iframe中还有什么。

    如何在Kotlin中使用regex来查找匹配项?

    我做了一个:

    val patternString = "(?:<iframe\\s)(?:[^<]*)(?:src=\\s*)(?:\"//specical.com/external/widget/api.php\"\\s*)(?:[^>]*)>"
    

    似乎不起作用。

    谢谢!

    2 回复  |  直到 5 年前
        1
  •  1
  •   sln    5 年前

    而且,这是可行的

    <iframe(?=\s)(?=(?:[^>"']|"[^"]*"|'[^']*')*?\ssrc\s*=\s*(?:(['"])(?:(?!\1)[\S\s])*?(?:specical\.com/external/widget/api\.php?)(?:(?!\1)[\S\s])*?\1))\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>

    https://regex101.com/r/gUEfvy/1

     < iframe
     (?= \s )
     (?=                           # Asserttion for:  src  (a pseudo atomic group)
          (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
          \s src \s* = \s* 
          (?:
               ( ['"] )                      # (1)
               (?:
                    (?! \1 )
                    [\S\s] 
               )*?
               (?:                           # 
                    specical\.com/external/widget/api\.php? 
               )
               (?:
                    (?! \1 )
                    [\S\s] 
               )*?
               \1 
          )
     )
                                   # Have the src attribute, just match the rest of tag
     \s+ 
     (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
    
     >                             # End  tag
    
        2
  •  0
  •   lannyf    5 年前

    这似乎奏效:

    val patternString = "(?:<iframe\\s)(?:[^<]*)(?:src=\\s*)(?:\"\\/\\/specical\\.com/external\\/widget\\/api.php?\\s*?)(?:[^>]*)>"
    val pattern = Pattern.compile(patternString)
    val matcher = pattern.matcher(str) 
    

    我肯定有更好的