我正在编写一个程序来扫描包含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}}。
答案 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 )
"