JREPL 匹配包含关键字的 URL
JREPL to match URL that contains keyword
我正在尝试使用 JREPL.bat 来匹配 txt 文件中包含特定术语的 URL(然后将结果写回文件)。
这就是我目前所拥有的,不幸的是它没有返回预期的结果。结果总是 NULL:
JREPL.bat "href=""(\w[^""]+/pdf4v/\w[^""]+)" "" /match /f html.txt /o -
html.txt
看起来如下(实际上文件要复杂得多;附加内容由 [...] 表示):
[...]
<ul>
<li><a href="#" id="fav" onclick="return favoritesadd(8094,'fav.png','removefav.png');"><img id="fav8094" src="fav.png" alt="" border="0" /> <span id="fav8094">ADD TO WISHLIST</span></a></li>
<li class="sixcol right"><a href="https://documents.domain.com/content/updates/year18/jv/folder01/pdf/pdf8094.zip?exp=1567791065&hsh=5a49e7d4828603beddbfb058a1535f5e&dl=att&filename=pdf-00008094-16.pdf" class="tcenter"><img src="pdf.png" class="icon" align="left" />16<br /><span class="small">download pdf</span></a></li>
<li class="sixcol"><a href="https://documents.domain.com/content/updates/year18/jv/folder01/pdf4v/pdf4v8094.zip?exp=1567791065&hsh=246a7702296f7db363ecaa1746a8815a&dl=att&filename=pdf-00008094-40.pdf" class="tcenter"><img src="pdf.png" class="icon" align="left" />40<br /><span class="small">download pdf</span></a></li>
<div class="clear"></div>
<li><a href="/details.php?id=8094&num=1&ss=1" onclick="$.open();return false;"><img src="/images/details.png" class="center" />Details</a></li>
</ul>
[...]
预期结果是:
https://documents.domain.com/content/updates/year18/jv/folder01/pdf4v/pdf4v8094.zip?exp=1567791065&hsh=246a7702296f7db363ecaa1746a8815a&dl=att&filename=pdf-00008094-40.pdf
有人可以帮忙吗?我不确定为什么这不起作用。
在此先感谢您的帮助!
试试正则表达式:href="(\w[^"]+\/pdf4v\/\w[^"]+)
可以在具有以下先决条件的批处理文件中使用以下单个命令行:
jrepl.bat
必须在包含包含此行的批处理文件的目录中。
- 执行此批处理文件时,文件
html.txt
必须位于当前目录中。
- 文件
html.txt
不能在一行中包含多个带有 /pdf4v/
的 URL。
- 文件
html.txt
包含 /pdf4v/
不在 URL 之外。
批处理文件命令行:
@%SystemRoot%\System32\findstr.exe /R "href=.*/pdf4v/" html.txt | call "%~dp0jrepl.bat" "^.*href=\x22([^\x22]*?/pdf4v/[^\x22]*)\x22.*$" "" /O html.txt
FINDSTR 仅支持非常有限的正则表达式,并且始终输出包含匹配字符串的整行。因此,区分大小写的正则表达式搜索字符串 href=.*/pdf4v/
查找包含 href=
和 /pdf4v/
.
的所有行
这些行由 FINDSTR 输出以处理 STDOUT 由 Windows 命令处理器重定向以处理 STDIN JREPL.BAT.
JREPL.BAT 运行一个更强大的 JScript 正则表达式替换以匹配行上的所有内容,该行肯定包含 href=
和 /pdf4v/
并带有标记URL 包含 /pdf4v/
并仅用标记的 URL.
替换该行
搜索表达式 ^.*href="([^"]*?/pdf4v/[^"]*)".*$
写在批处理文件中,每个 "
的 \x22
因为 cmd.exe
将双引号解释为参数的 begin/end字符串.
有一个更好的解决方案,使用 JREPL.BAT 选项 /MATCH
:
@call "%~dp0jrepl.bat" "[^\x22]*?/pdf4v/[^\x22]*" "" /MATCH /F html.txt /O -
搜索表达式 [^"]*?/pdf4v/[^"]*
仅匹配所有由 0 个或多个非双引号字符或非贪婪换行符和 /pdf4v/
以及 0 个或多个非双引号字符组成的字符串引号或换行符。这非常简单,可能会导致误报,但适用于提供的示例。
遗憾的是,JScript 正则表达式引擎不支持现代正则表达式引擎的后视或其他增强功能,以限制对 href
值的搜索。但是可以使用以下方法避免一些误报:
@call "%~dp0jrepl.bat" "[^\x22]*?/pdf4v/[^\x22]*" "" /INC "/href=\x22[^\x22]*?\/pdf4v\//" /MATCH /F html.txt /O -
不包含 href="[^"]*?/pdf4v/
的行在应用简单搜索表达式之前被此包含过滤器过滤掉。这仍然不完美,但也许足以完成这项任务。
我正在尝试使用 JREPL.bat 来匹配 txt 文件中包含特定术语的 URL(然后将结果写回文件)。
这就是我目前所拥有的,不幸的是它没有返回预期的结果。结果总是 NULL:
JREPL.bat "href=""(\w[^""]+/pdf4v/\w[^""]+)" "" /match /f html.txt /o -
html.txt
看起来如下(实际上文件要复杂得多;附加内容由 [...] 表示):
[...]
<ul>
<li><a href="#" id="fav" onclick="return favoritesadd(8094,'fav.png','removefav.png');"><img id="fav8094" src="fav.png" alt="" border="0" /> <span id="fav8094">ADD TO WISHLIST</span></a></li>
<li class="sixcol right"><a href="https://documents.domain.com/content/updates/year18/jv/folder01/pdf/pdf8094.zip?exp=1567791065&hsh=5a49e7d4828603beddbfb058a1535f5e&dl=att&filename=pdf-00008094-16.pdf" class="tcenter"><img src="pdf.png" class="icon" align="left" />16<br /><span class="small">download pdf</span></a></li>
<li class="sixcol"><a href="https://documents.domain.com/content/updates/year18/jv/folder01/pdf4v/pdf4v8094.zip?exp=1567791065&hsh=246a7702296f7db363ecaa1746a8815a&dl=att&filename=pdf-00008094-40.pdf" class="tcenter"><img src="pdf.png" class="icon" align="left" />40<br /><span class="small">download pdf</span></a></li>
<div class="clear"></div>
<li><a href="/details.php?id=8094&num=1&ss=1" onclick="$.open();return false;"><img src="/images/details.png" class="center" />Details</a></li>
</ul>
[...]
预期结果是:
https://documents.domain.com/content/updates/year18/jv/folder01/pdf4v/pdf4v8094.zip?exp=1567791065&hsh=246a7702296f7db363ecaa1746a8815a&dl=att&filename=pdf-00008094-40.pdf
有人可以帮忙吗?我不确定为什么这不起作用。
在此先感谢您的帮助!
试试正则表达式:href="(\w[^"]+\/pdf4v\/\w[^"]+)
可以在具有以下先决条件的批处理文件中使用以下单个命令行:
jrepl.bat
必须在包含包含此行的批处理文件的目录中。- 执行此批处理文件时,文件
html.txt
必须位于当前目录中。 - 文件
html.txt
不能在一行中包含多个带有/pdf4v/
的 URL。 - 文件
html.txt
包含/pdf4v/
不在 URL 之外。
批处理文件命令行:
@%SystemRoot%\System32\findstr.exe /R "href=.*/pdf4v/" html.txt | call "%~dp0jrepl.bat" "^.*href=\x22([^\x22]*?/pdf4v/[^\x22]*)\x22.*$" "" /O html.txt
FINDSTR 仅支持非常有限的正则表达式,并且始终输出包含匹配字符串的整行。因此,区分大小写的正则表达式搜索字符串 href=.*/pdf4v/
查找包含 href=
和 /pdf4v/
.
这些行由 FINDSTR 输出以处理 STDOUT 由 Windows 命令处理器重定向以处理 STDIN JREPL.BAT.
JREPL.BAT 运行一个更强大的 JScript 正则表达式替换以匹配行上的所有内容,该行肯定包含 href=
和 /pdf4v/
并带有标记URL 包含 /pdf4v/
并仅用标记的 URL.
搜索表达式 ^.*href="([^"]*?/pdf4v/[^"]*)".*$
写在批处理文件中,每个 "
的 \x22
因为 cmd.exe
将双引号解释为参数的 begin/end字符串.
有一个更好的解决方案,使用 JREPL.BAT 选项 /MATCH
:
@call "%~dp0jrepl.bat" "[^\x22]*?/pdf4v/[^\x22]*" "" /MATCH /F html.txt /O -
搜索表达式 [^"]*?/pdf4v/[^"]*
仅匹配所有由 0 个或多个非双引号字符或非贪婪换行符和 /pdf4v/
以及 0 个或多个非双引号字符组成的字符串引号或换行符。这非常简单,可能会导致误报,但适用于提供的示例。
遗憾的是,JScript 正则表达式引擎不支持现代正则表达式引擎的后视或其他增强功能,以限制对 href
值的搜索。但是可以使用以下方法避免一些误报:
@call "%~dp0jrepl.bat" "[^\x22]*?/pdf4v/[^\x22]*" "" /INC "/href=\x22[^\x22]*?\/pdf4v\//" /MATCH /F html.txt /O -
不包含 href="[^"]*?/pdf4v/
的行在应用简单搜索表达式之前被此包含过滤器过滤掉。这仍然不完美,但也许足以完成这项任务。