Regex JREPL匹配包含关键字的URL
我正在尝试使用JREPL.bat匹配txt文件中包含特定术语的URL(然后将结果写回该文件) 这就是我到目前为止所做的,不幸的是,它没有返回预期的结果。结果始终为空:Regex JREPL匹配包含关键字的URL,regex,batch-file,windows-scripting,jrepl,Regex,Batch File,Windows Scripting,Jrepl,我正在尝试使用JREPL.bat匹配txt文件中包含特定术语的URL(然后将结果写回该文件) 这就是我到目前为止所做的,不幸的是,它没有返回预期的结果。结果始终为空: JREPL.bat“href=”“(\w[^”“]+/pdf4v/\w[^”“]+)”“/match/f html.txt/o- html.txt如下所示(实际上,文件要复杂得多;额外的内容由[…]表示): […] [...] 预期结果是: https://documents.domain.com/content/u
JREPL.bat“href=”“(\w[^”“]+/pdf4v/\w[^”“]+)”“/match/f html.txt/o-
html.txt
如下所示(实际上,文件要复杂得多;额外的内容由[…]表示):
[…]
[...]
预期结果是:
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[^”]+)
试试正则表达式:href=“(\w[^”]+\/pdf4v\/\w[^”]+)
以下单个命令行可在批处理文件中使用,前提条件如下:
jrepl.bat
必须位于包含此行的批处理文件的目录中html.txt
必须位于当前目录中html.txt
不能在一行中包含多个带有/pdf4v/
的URLhtml.txt
包含的/pdf4v/
不在URL之外@%SystemRoot%\System32\findstr.exe /R "href=.*/pdf4v/" html.txt | call "%~dp0jrepl.bat" "^.*href=\x22([^\x22]*?/pdf4v/[^\x22]*)\x22.*$" "$1" /O html.txt
FINDSTR支持非常有限的正则表达式,并且总是输出包含匹配字符串的整行。因此,区分大小写的正则表达式搜索字符串href=.*/pdf4v/
将查找包含href=
和/pdf4v/
的所有行
这些行由FINDSTR输出以处理STDOUT,Windows命令处理器将其重定向以处理JREPL.BAT的STDIN
JREPL.BAT运行一个功能强大得多的JScript正则表达式替换,以匹配肯定包含href=
和/pdf4v/
的行上的所有内容,并标记包含/pdf4v/
的URL,并仅用标记的URL替换该行
搜索表达式^.*.href=“([^”]*?/pdf4v/[^”]*)”*$
以批处理文件的形式写入,每个“
都使用\x22
作为cmd.exe
将双引号解释为参数字符串的开始/结束
使用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/
的行将被此include筛选器过滤掉。这仍然不够完美,但可能足以完成此任务。以下单个命令行可在批处理文件中使用,前提条件如下:
jrepl.bat
必须位于包含此行的批处理文件的目录中html.txt
必须位于当前目录中html.txt
不能在一行中包含多个带有/pdf4v/
的URLhtml.txt
包含的/pdf4v/
不在URL之外@%SystemRoot%\System32\findstr.exe /R "href=.*/pdf4v/" html.txt | call "%~dp0jrepl.bat" "^.*href=\x22([^\x22]*?/pdf4v/[^\x22]*)\x22.*$" "$1" /O html.txt
FINDSTR只支持非常有限的正则表达式,并且总是输出包含匹配字符串的整行。因此区分大小写的正则表达式搜索字符串href=.*/pdf4v/
会查找包含href=
和/pdf4v/
的所有行
这些行由FINDSTR输出以处理STDOUT,Windows命令处理器将其重定向以处理JREPL.BAT的STDIN
JREPL.BAT运行一个功能强大得多的JScript正则表达式替换,以匹配肯定包含href=
和/pdf4v/
的行上的所有内容,并标记包含/pdf4v/
的URL,并仅用标记的URL替换该行
搜索表达式^.*.href=“([^”]*?/pdf4v/[^”]*)”*$
以批处理文件的形式写入,每个“
都使用\x22
作为cmd.exe
将双引号解释为参数字符串的开始/结束
使用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/
的行在应用简单搜索之前由该include筛选器过滤掉