私は、ドメイン名の有効期限を確認する関数のセットを書き込もうとしました:文字列比較間違い
(ql:quickload 'inferior-shell)
(defun whois-lookup (site)
(let ((request (format nil "whois ~a" site)))
(inferior-shell:run/ss request)))
(defun match-expiration-string (input)
(let ((test-string "Registrar Registration Expiration Date:"))
(string> input test-string)))
(defun domain-expiration-date (site)
(with-input-from-string (input (whois-lookup site))
(loop for line = (read-line input nil nil)
while line do
(when (match-expiration-string line)
(format t "~A~%~t~A ~%" site line)))))
私はこのようにそれを呼び出すと思います:(domain-expiration-date "startpage.com")
。
残念ながら、関連する行を表示するだけではなく、すべての行を表示します。
match-expiration-string
は正しく動作しているようですので、問題は何か分かりません。
CL-USER> (match-expiration-string "Registrar Registration Expiration Date: 2016-05")
39 (6 bits, #x27, #o47, #b100111)
CL-USER> (match-expiration-string "Registrar Registration Expiration ")
NIL
'(:(私は、ドメインの他のタイプのために他の検索文字列を必要とする場合には場所を作った)すべてのWHOIS応答ではありませんでしたので、私は、検索を修正:私はまた、「レジストラ登録の有効期限は、」気づい文字列> "a" "レジストラ登録有効期限:")=> 0。部分文字列が正確に一致するかどうかを確認するには、 'STRING ='(必要なキーワード引数を使用)を使用する必要があります。または、正規表現を使用します。 – jkiiski
意味があります。 'string ='で動作するバージョンがありましたが、明らかにその行が十分に長い場合に限ります。だからRegexそれは!ありがとうございました! – Pascal