2012-09-30 45 views
0

我明白如何使用PHP的preg_match()從字符串中提取變量序列。但是,如果有需要匹配的變量,我不知道該怎麼做。使用正則表達式匹配多個變量(PHP/JS)

這裏是我感興趣的代碼:

$string1 = "[email protected]"; 
$pattern1 = '/help-(.*)@mysite.com/'; 
preg_match($pattern1, $string1, $matches); 
print_r($matches[1]); // prints "xyz123" 

$string2 = "[email protected]"; 

所以基本上我不知道如何提取兩種模式:1)是否字符串的第一部分是「幫助」或「商界」,2)第二部分是「xyz123」還是「zyx321」。

可選的獎金問題是什麼答案看起來像寫在JS?我從來沒有真正知道正則表達式(即包含斜槓的代碼,/..../)在PHP和JS(或任何其他語言)中總是相同或不相同。

回答

1

實際上這個解決方案非常簡單。對於要匹配的每種圖案,請將該圖案放在括號(...)之間。所以要提取任何模式使用你已經使用的東西(.*)。爲了簡單區分的「幫助」與「商業」,你可以在你的正則表達式使用|

/(help|business)-(.*)@mysite.com/ 

上述正則表達式應該匹配兩種格式。 (help|business)基本上說,要麼匹配helpbusiness

所以最終的答案是這樣的:

$string1 = "[email protected]"; 
$pattern1 = '/(help|business)-(.*)@mysite.com/'; 
preg_match($pattern1, $string1, $matches); 
print_r($matches[1]); // prints "help" 
echo '<br>'; 
print_r($matches[2]); // prints "xyz123" 

同樣的正則表達式應該在JavaScript中使用。你不需要調整它。

1

是的,凱末爾是對的。您可以在JavaScript中使用相同的模式。

var str="[email protected]"; 
var patt1=/(help|business)-(.*)@mysite.com/; 
document.write(str.match(patt1)); 

只要注意不同函數的返回值。 PHP返回一個數組,其中比JavaScript中的代碼更多。