Regex autohotley中的正则表达式和文件读取行

Regex autohotley中的正则表达式和文件读取行,regex,character-encoding,autohotkey,Regex,Character Encoding,Autohotkey,我现在正在写一个脚本,用来检查我写的另一个脚本的日志,看看它在成功ping之前是否有三次或更多的失败ping,目前这只是一个简单的例子,但看起来应该是这样的 fileread,x,C:\Users\Michael\Desktop\ping.txt result:=RegExMatch(%x% ,failure success) msgbox,,, The file is = %x% `n the result is = %result% 现在尝试读取的文件是 success failure

我现在正在写一个脚本,用来检查我写的另一个脚本的日志,看看它在成功ping之前是否有三次或更多的失败ping,目前这只是一个简单的例子,但看起来应该是这样的

fileread,x,C:\Users\Michael\Desktop\ping.txt
result:=RegExMatch(%x% ,failure success)
msgbox,,, The file is = %x% `n the result is  = %result%
现在尝试读取的文件是

success failure success
出于某种原因,当它读取文件时,会说变量%x%”包含非法字符

  • 当我将ping.txt的内容复制并粘贴到脚本中,并将其保存为变量时,它会起作用
  • 我已确保该文件具有windows行结尾CR+LF
  • 我已将文件读取中生成的变量指定为另一个变量,从而去除任何尾随或前导空格字符
  • 该文件是用ANSI编码的,但仍然存在UTF8的问题

函数参数采用不带%符号的变量名,只需将其删除即可

我还想指出,如果第二个参数是正则表达式,
除了包含正则表达式的变量外,还需要在其周围加引号。
按原样,脚本将一个空字符串作为模式传递,该模式将始终返回1
(失败被解释为带有空字符串的变量。)。
引用Lexikos的话:

“当编译为正则表达式模式时,空字符串将完全匹配 在您试图匹配它的任何位置上都没有字符。想想看 它是这样的:对于任何字符串中的任何位置n,接下来的0个字符 都是一样的。”

因为你只是在测试真相,
或者查找索引,我想指出Autohotkey有一个有用的速记操作符

string := "this is a test"

f1::
result := RegExMatch(string, "\sis")
traytip,, %result%
Return

f2::
result := string ~= "\sis"
traytip,, % result
Return
这些热键都做同样的事情;第二个使用速记运算符
~=

请注意,第二个示例中的traytip参数只有一个%

当使用%启动命令参数以启动表达式时,
在表达式中,变量不包含在%中

三元运算符
?:
也非常有用:

string := "this is a test"
f3::traytip,, % (result := string ~= "\sis") ? (result) : ("nothing")
它可能看起来很复杂,但很简单。
想想
%
仿佛
与当时一样
与其他方法一样
如果(正确),则(a)其他(b)
%(真的)?(a) :(b)

如果为变量赋值0(或不赋值),则该变量的计算结果将为False。
但在本例中,将匹配“\sis”,并返回空间的索引(5),
所以它被评估为真的

您可以在此处阅读有关变量和运算符的更多信息:

@hamsolo474没问题。我已经用一些重要的信息更新了我的答案,请看一看。那么“var~=pattern”等同于“regexmatch(var,pattern)”?这很有趣,还有其他像~=这样的秘密操作符吗?如果有,你能把我链接到它们的列表上吗?如果没有三元操作符,我不想活下去。我已经更新了我的答案,您还可以查看中的示例,以获得一个非常有用的变量开关。