2011-02-04 100 views
1

我試圖調試一些PHP,但我沒有那麼熱我的正則表達式,有人可以請爲我翻譯這個? (如果連它是正則表達式)這個正則表達式字符串是什麼意思?

public static function fetch($number) 
    { 
     $number = str_replace(" ", "", $number); 
     $html = file_get_contents('http://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=' . $number); 
     preg_match_all('/\<td style="width.*\<b\>(.*)[: ]*\<\/b\>/msU', $html, $keys); 
     preg_match_all('/\<\/b\>.*\<td.*\>(.*)\<\/td\>/msU', $html, $values); 

     if (!$keys[1]) 
     { 
      return null; 
     } 

不停地爲背景的PHP代碼片段,如果它可以幫助:d 謝謝:)

回答

5

我只翻譯第一個,第二個是類似的。編號:U不是Unicode選項,而是ungreedy選項。我的錯。正則表達式畢竟不是:)

壞我建議使用正則表達式,這些替代:

/<td style="width.*?<b>(.*?)[: ]*<\/b>/s 
/<\/b>.*?<td.*?>(.*?)<\/td>/s 
5

或多或少,它返回{extracted}部分來自<td style="width ..."><b>{extracted}: </b>

+0

所以目標網站上有``它會提取這些表格元素中的文本? – Kyle 2011-02-04 10:23:37

+0

是的,「......」匹配一切。 – 2011-02-04 10:25:28

+1

您忘記提及第二行的功能了...... – Xhalent 2011-02-04 10:31:03

1

要幫助理解正則表達式我推薦下載Expresso(對於Windows),這是一個免費(但需要註冊)表達式解析器和測試工具。

+0

這個php正則表達式和網絡正則表達式之間可能存在一些差異,這是Expresso使用的。 – Xhalent 2011-02-04 10:30:05

0

我相信它嘗試匹配的結構如下:

<td width=.....><b>key:</b></td><td>value</td> 

及其解析字符串兩次,一次是從第一列中獲取的鍵,第二次是從第二列中獲取的值。

0

我想要一個建議,你的正則表達式可能不會按預期工作。在你的情況下,最好使用xpath。

看這個片段:

$str = " 
<html> 
    <body> 
     <table> 
     <tr> 
      <td style='width:500px'><b>foo : </b> bar</td> 
      <td style='width:200;vertical-align:'><b>baz :</b> qux</td> 
     </tr> 
     </table> 
    </body> 
</html> 
"; 

$xml = simplexml_load_string($str); 

$results = array(); 
foreach($xml->xpath('//td[@style][b]') as $row) { 
    $value = trim(sprintf("%s", $row)); 
    $key = trim((string)$row->b, ' :'); 
    $results[$key] = $value; 
} 

var_dump($results); 

可否打印

array(2) { 
    ["foo"]=> 
    string(3) "bar" 
    ["baz"]=> 
    string(3) "qux" 
} 
相關問題