Kotlin,如何在HTML中找到与特殊src匹配的iframe广告代码

时间:2018-12-11 20:09:12

标签: html regex iframe kotlin

想从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中使用正则表达式找到匹配项?

我做了一个:

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

似乎不起作用。

谢谢!

2 个答案:

答案 0 :(得分:1)

而且,这可行

<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

答案 1 :(得分:0)

这似乎可行:

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

我确定有更好的选择