2011-10-02 58 views
1

我在JavaScript以下正則表達式,我想有在PHP完全相同的功能(或類似):將Js中的Regexp轉換爲PHP?

// -=> REGEXP - match "x bed" , "x or y bed": 
var subject = query; 
var myregexp1 = /(\d+) bed|(\d+) or (\d+) bed/img; 
var match = myregexp1.exec(subject); 
while (match != null){ 
    if (match[1]) { "X => " + match[1]; } 
    else{    "X => " + match[2] + " AND Y => " + match[3]} 
    match = myregexp1.exec(subject); 
} 

此代碼搜索匹配「×牀」或「x的圖案的串或y牀「。 找到匹配項時,變量x和變量y需要進一步處理。問題:

你如何在php中構造這段代碼片段?

任何援助讚賞球員...

+1

你到目前爲止嘗試過什麼?哪一部分對您有問題? –

+0

Boolmark優秀的手冊在http://www.php.net/manual/en/ref.pcre.php。 –

回答

1

您可以使用正則表達式不變。 PCRE語法支持Javascript所做的一切。除了在PHP中未使用的/g標誌。相反,你必須preg_match_all返回結果的數組:

preg_match_all('/(\d+) bed|(\d+) or (\d+) bed/im', $subject, $matches, 
    PREG_SET_ORDER); 
foreach ($matches as $match) { 

PREG_SET_ORDER是其他伎倆在這裏,並且將保持類似你如何得到它在JavaScript中$match陣列。

1

我發現RosettaCode在回答這些問題時很有用。

它顯示瞭如何在各種語言中做同樣的事情。正則表達式就是一個例子。他們也有文件io,排序,各種基本的東西。

+0

這是一個有趣的網站。 –

0

您可以使用preg_match_all($pattern, $subject, &$matches, $flags, $offset)在字符串上運行正則表達式,然後將所有匹配項存儲到數組中。

運行正則表達式後,可以在作爲第三個參數傳遞的數組中找到所有匹配項。然後,您可以使用foreach重複這些匹配。

沒有設置$flags,你的陣列將有一個這樣的結構:

$array[0] => array (// An array of all strings that matched (e.g. "5 beds" or "8 or 9 beds") 
    0 => "5 beds", 
    1 => "8 or 9 beds" 
); 
$array[1] => array (// An array containing all the values between brackets (e.g. "8", or "9") 
    0 => "5", 
    1 => "8", 
    2 => "9" 
); 

此行爲是不完全一樣的,我個人不喜歡那麼多。要將行爲更改爲更「類似JavaScript」的行爲,請將$flags設置爲PREG_SET_ORDER。您的數組現在將具有與JavaScript中相同的結構。

$array[0] => array(
    0 => "5 beds", // the full match 
    1 => "5", // the first value between brackets 
); 
$array[1] => array(
    0 => "8 or 9 beds", 
    1 => "8", 
    2 => "9" 
);