2010-05-18 73 views
0

這個Perl正則表達式的PHP相當於什麼?這個Perl正則表達式的PHP相當於什麼?

if (/^([a-z0-9-]+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/ 
    and $1 ne "global" and $1 ne "") { 
    print " <tr>\n"; 
    print " <td>$1</td>\n"; 
    print " <td>$2</td>\n"; 
    print " <td>$3</td>\n"; 
    print " <td>$4</td>\n"; 
    print " <td>$5</td>\n"; 
    print " <td>$6</td>\n"; 
    print " <td>$7</td>\n"; 
    print " <td>$8</td>\n"; 
    print " </tr>\n"; 
} 
+2

你讀過任何文件?:http://www.php.net/manual/en/book.pcre.php – 2010-05-18 13:59:20

+0

是啊,我只是不知道哪一個使用。 – Flukey 2010-05-18 14:06:59

+0

哇。只有第一個領域值得捕獲,其餘的看起來像是一個大*分裂* - *和一個標準的*。 – Axeman 2010-05-18 17:59:22

回答

2

PHP有一些functions that work with PCRE。所以試試這個:

if (preg_match('/^([a-z0-9-]+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/', $str, $match) && $match[1] != "global" && $match[1] != "") { 
    print " <tr>\n"; 
    print " <td>$match[1]</td>\n"; 
    print " <td>$match[2]</td>\n"; 
    print " <td>$match[3]</td>\n"; 
    print " <td>$match[4]</td>\n"; 
    print " <td>$match[5]</td>\n"; 
    print " <td>$match[6]</td>\n"; 
    print " <td>$match[7]</td>\n"; 
    print " <td>$match[8]</td>\n"; 
    print " </tr>\n"; 
} 
+0

非常好!謝謝! :-) – Flukey 2010-05-18 14:14:17

+0

在測試其他條件之前,您可能需要檢查設置了'$ match [1]',以避免線路上出現與預期輸入不匹配的通知/警告。 – 2010-05-18 14:46:34

+1

@Greg K:'&&'是PHP中的短路操作符。這意味着當在'A && B'中時,只有在'A'是*真*時才評估'B'。在這種情況下''match [1]'僅在'preg_match'返回一個真值時被評估。如果'preg_match'返回一個真值,'$ match [1]'被設置。所以不需要檢查'$ match [1]'是否存在。 – Gumbo 2010-05-18 15:35:12

6
+0

非常好。非常感謝! 但是,在preg_match中,我該如何做到像perl那樣你有$ 1,$ 2,$ 3等? 希望有道理! – Flukey 2010-05-18 14:04:12

+3

閱讀他鏈接到的文檔:「如果提供了匹配,則會填充搜索結果。$ matches [0]將包含匹配完整模式的文本,$ matches [1]將匹配匹配的文本第一個捕獲的帶括號的子模式,等等。「 – 2010-05-18 14:05:25

7

我建議,而不是使用正則表達式,你拆分空白。您檢查的所有內容是由空格分隔的八列。

請看preg_splithttp://www.php.net/manual/en/function.preg-split.php。它應該是這個樣子:

$fields = preg_split('/\s+/', $string); 
if ($fields[0] == '...') 
... 
+0

好主意!謝謝 :-) – Flukey 2010-05-18 14:31:17

相關問題