Regex JREPL匹配包含关键字的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匹配txt文件中包含特定术语的URL(然后将结果写回该文件)

这就是我到目前为止所做的,不幸的是,它没有返回预期的结果。结果始终为空:

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/
    的URL
  • 文件
    html.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/
    的URL
  • 文件
    html.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筛选器过滤掉