2012-03-28 32 views
1

以及我目前正在編寫一個腳本,是爲了檢查我寫的另一個腳本的日誌,看它是否有一個成功的一個之前,有三個或更多的不成功的坪,這是隻是此刻準系統,但它應該是這個樣子正則表達式和文件讀取線在autohotley

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的內容粘貼到腳本,並將其保存爲它工作
  • 我已經確定該文件還有窗戶行結束符CR + LF
  • 我已經分配一個變量在文件中生成的可變讀爲另一個變量從而汽提任何尾隨或前導空白字符
  • 文件被編碼在ANSI和仍然有UTF8

回答

2

功能參數取變量名而不%符號的問題,簡單地刪除t下襬。

我也想指出,如果第二個參數意思是一個正則表達式,而不是一個包含正則表達式的變量,則需要引用它。
由於您的腳本將傳遞一個空字符串作爲將始終返回的模式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),
因此它被評估爲真。

您可以在此處詳細瞭解變量和運算符:
http://l.autohotkey.net/docs/Variables.htm

+0

感謝的人,它的工作完美 – hamsolo474 2012-03-28 03:11:54

+1

@ hamsolo474沒問題。我已經用一些重要信息更新了我的答案,請看看。 – 2012-03-28 04:22:09

+1

所以「var〜= pattern」相當於「regexmatch(var,pattern)」?那有趣的是,還有其他的祕密運營商像〜=如果​​可以的話,你可以將我鏈接到他們的列表 – hamsolo474 2012-03-28 04:51:23