Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式匹配关键字之间的所有内容(包括新行)_Regex_Vbscript_Newline - Fatal编程技术网

Regex 正则表达式匹配关键字之间的所有内容(包括新行)

Regex 正则表达式匹配关键字之间的所有内容(包括新行),regex,vbscript,newline,Regex,Vbscript,Newline,我正在编写一个vbscript文件来解析日志文件中的数据。 日志文件中有此结构,总是以某种方式格式化: <name="ExecResponse" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我正在编写一个vbscript文件来解析日志文件中的数据。 日志文件中有此结构,总是以某种方式格式化:

<name="ExecResponse" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXX==" />

即使有0行或多行新行,我如何在引号(XXXXX)之间匹配数据? 不是特定于语言的,但我正在Textpad中验证,因此不确定全局运算符是否对我可用,但在VBScript中可以


谢谢。

最简单的方法是使用
/“[^”]*”/g
,假设所有引号都正确平衡,没有转义符。

类似于以下内容:

value\="([^"]*)"
如果要允许可能的空间,请执行以下操作:

value[[:space:]]?\=[[:space:]]?"([^"]*)"
理论上,单词value后面跟一个转义的等号,后面跟一个引号,后面跟任何不是引号的东西,后面跟另一个引号。

我不熟悉VB脚本,但“除引号外的任何内容”部分也应该包含新行。注意,在其他语言中,有一些开关可以包含新行

Ex PHP对新行使用/s修饰符:

<?php
preg_match('/value\="([^"]*)"/s',$string);
?>

VBScript解决方案,因为您标记了问题:

演示:

>s=“”
>>>回音
>>>Set re=New RegExp
>>>re.Pattern=“”([^”“]*)”
>>>re.Global=True
>>>对于re.Execute中的每个m:WScript.Echo m.SubMatches(0):Next
执行响应
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX==
实际的正则表达式是
“([^”]*)”
,但双引号必须加倍才能在字符串中转义


如果您想要更具体的匹配(例如,仅仅是
value
属性的值),则需要使正则表达式更具体,例如:
value=“([^”]*)”

@CodeJockey:这不起作用(至少在VBScript中不起作用);ECMAScript没有DOTALL修饰符。这就是该页面所说的-它还建议了我使用的
[\s\s]
的另一种选择-这就是为什么我把它放在评论中而不是答案中的原因;还因为你建议了另一种选择,而我正在打嗝。最终编辑-这是搜索时谷歌上的第二个链接”VBScript regex newline“@CodeJockey:Oops.我刚在链接中读到“点”,未能查看页面。我很抱歉。我尝试了这个,它匹配:'ExecResponse'、'value=“,等等…但数据(XXX)@Chinobling:嗯,
ExecResponse
也在引号之间,所以我假设您也想匹配它。它不匹配
”value:“
,但是,因为每个字符只能匹配一次(请参阅)。如果要将匹配限制为前面有
value=
,只需使用
/value=“([^”]*)”/g
并获取组1的内容。
Set fso = CreateObject("Scripting.FileSystemObject")
txt = fso.OpenTextFile("C:\path\to\your.log").ReadAll

Set re = New RegExp
re.Pattern = """([^""]*)"""
re.Global = True

For Each m In re.Execute(txt)
  WScript.Echo m.SubMatches(0)
Next