无法获得与此HTML匹配的Perl正则表达式

时间:2013-12-26 21:02:39

标签: regex perl

我正在编写一个程序来扫描包含HTML的.txt文件,例如

    title="Recent Announcements "
    height="475"
    width="100%"
    frameborder="0"
    marginwidth="0"
    marginheight="0"
    scrolling="auto"
    src="https://sample.url?panel=Main"

我的Perl代码看起来像

if ( /title="Recent.*src="(.+[^\/]panel=Main)"/s ) {
  do stuff;
}

如果我将(/title="Recent"/)(/src="(.+[^\/]panel=Main)"/)分成两个单独的if语句,则两项检查都可以正常运行。

问题是src=文件中有多个部分具有相同格式的.txt,我想使用此方法仅在<{em>> 之后捕获< {1}}。

2 个答案:

答案 0 :(得分:6)

.*.+是贪婪的,这意味着如果您的输入有多个title=...src=...行,那么您的正则表达式将匹配第一个title到最后src。尝试非贪婪的表达式.*?.+?

/title="Recent.*?src="(.+?[^\/]panel=Main)"/s

答案 1 :(得分:0)

这可能有用。如果不知道那些“其他部分”可能是什么,很难做到。

 #  /(?s)title\s*=\s*"Recent(?:(?!title\s*=\s*"Recent|src\s*=\s*").)+src\s*=\s*"([^"]*panel=Main)"/

 (?s)
 title \s* = \s* "Recent
 (?:
      (?!
           title \s* = \s* "Recent
        |  src \s* = \s* "
      )
      . 
 )+
 src \s* = \s* " 
 ( [^"]*  panel=Main )
 "