2012-04-26 51 views
1

更新提取數據:想通了從Windows DOS提示符

答: 我想通了。

每個字符後都有一個隱藏的\ 0。

修復的方法是簡單的:

trim(str_replace("\0", '', $string)) 

ASCII輸出:

|0()|84(T)|0()|104(h)|0()|101(e)|0()|32()|0()|110(n)|0()|117(u)|0()|109(m)|0()|98(b)|0()|101(e)|0()|114(r)|0()|32()|0()|111(o)|0()|102(f)|0()|32()|0()|112(p)|0()|101(e)|0()|110(n)|0()|100(d)|0()|105(i)|0()|110(n)|0()|103(g)|0()|32()|0()|100(d)|0()|101(e)|0()|118(v)|0()|105(i)|0()|99(c)|0()|101(e)|0()|40(()|0()|115(s)|0()|41())|0()|32()|0()|105(i)|0()|115(s)|0()|32()|0()|48(0)|0()|46(.)|0()|13(
)|0()| 

問:

這裏是我與測試字符串的一個很好的例子:

$ string =「待處理設備的數量(s )是1「。

string(73)「暫掛設備的數目爲1」。

我嘗試運行的代碼是:

$string = "the number of pending device(s) is 1."; 
if(strstr($string, "pending")) 
{ 
    echo "Found"; 
} 

另外一個我一直在測試:

$text = "The number of pending device(s) is 1."; 
     $re1='.*?'; # Non-greedy match on filler 
     $re2='(?:[a-z][a-z]+)'; # Uninteresting: word 
     $re3='.*?'; # Non-greedy match on filler 
     $re4='(?:[a-z][a-z]+)'; # Uninteresting: word 
     $re5='.*?'; # Non-greedy match on filler 
     $re6='(?:[a-z][a-z]+)'; # Uninteresting: word 
     $re7='.*?'; # Non-greedy match on filler 
     $re8='((?:[a-z][a-z]+))'; # Word 1 
     $re9='.*?'; # Non-greedy match on filler 
     $re10='(\\d+)'; # Integer Number 1 

     if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7.$re8.$re9.$re10."/is", $text, $matches)) 
     { 
      $word1=$matches[1][0]; 
      $int1=$matches[2][0]; 
      print "($word1) ($int1) \n"; 
     } 

現在這個偉大的工程,如果它只是一個字符串。我從一個Windows DOS提示符中提取數據,我可以很好地回顯數據,但不幸的是,當我嘗試通過preg_match_all或strpos或strstr運行數據時,它總是返回false。這可能是一個編碼問題嗎?所有的數據回聲瀏覽器都很好。

請幫忙!

+0

您是否嘗試將其明確轉換爲str?我非常懷疑它是編碼,因爲我已經通過preg_match運行了一些嚴重的非UTF8字符串 – 2012-04-26 22:33:38

+1

此外,我將假設根據您的正則表達式知識,您的strstr()調用缺少的引號是一個輸入錯誤 – 2012-04-26 22:35:29

+0

如果單詞不感興趣,你看它嗎?爲什麼你甚至在意這是兩個字母很大?你爲什麼要算數字? – hakre 2012-04-26 22:35:33

回答

0

正如您的示例所示,strstr()preg_match_all()都正常工作。因此,除了推測之外,我們無能爲力。

由於這是你正在閱讀的shell輸出的問題,關鍵是字符串和你的測試之間的區別,你需要編輯這個問題或問一個新的問題,提供你的代碼「 Windows DOS提示符「。

此外,「呼應到瀏覽器」不是檢查字符串的好方法。嘗試讀取單個字節。 (我通常使用for循環,十六進制編輯器或數據包捕獲實用程序。)

+0

這真的很奇怪,因爲我可以在這個字符串之前運行strstr($ string,「p」)並提取數據,但是隻是沒有這個字符串。 – ChrisG 2012-04-26 23:56:12

+0

空白?進一步推測是沒有意義的 - 只需給我們一個代碼來證明問題。 – aib 2012-04-26 23:57:54

相關問題