2013-07-11 83 views
-1

對不起,我的英語不好。我有一個問題,我想比較兩個不同的字符串使用reg exp。第一個字符串的結構像a-b-1,例如:mobile-phone-1。而第二個字符串的結構像a-b-1/d-e-2,例如:mobile-phone-1/nokia-asha-23。我該怎麼做?您可以使用preg_match()方法或其他方法...此方法用於兩個不同的字符串。非常感謝!如何爲字符串寫入reg exp具有類似a-b-1和a-b-1/d-e-2的結構?

代碼演示:

if (preg_match("reg exp 1", string1)) { // do something } 
if (preg_match("reg exp 2", string2)) { // do something } 

P/S:不要太在意代碼演示

+1

通過比較兩個字符串的含義是什麼?用preg_match比較字符串與正則表達式,並可能將其拆分。你能解釋一下你需要什麼嗎? – Boynux

+2

[本站](http://www.regular-expressions.info/)會告訴你。當你自己做這件事時,你還會學習更多... –

+0

@Boynux我更新了我的問題 –

回答

1
$pattern = '#[\w]+-[\w]+-[\d]+(/[\w]+-[\w]+-[\d]+)?#'; 
if (preg_match($pattern, $str, $matches)){ 
    return $matches; 
} 

爲了配合較短的字符串使用:

$pattern = '#[\w]+-[\w]+-[\d]+#'; 

要匹配更長:

$pattern = '#[\w]+-[\w]+-[\d]+/[\w]+-[\w]+-[\d]+#'; 

要使用甚至更短劃線匹配較長:

$pattern = '#[\w]+-[\w]+-[\d]+/[\w-]+[\d]+#'; 
+0

不好意思!什麼樣的字符串可以使用這種模式? a-b-1或a-b-1/d-e-2? –

+0

它可以用來檢測兩者。括號中的部分帶有問號,因爲它是可選的。 –

+0

我想爲2個不同的字符串有2個模式,它可以嗎?不可選。 –

1
if(preg_match("/^([a-z]+)-([a-z]+)-([0-9]+)$/i",$string1)) 

if(preg_match("/^([a-z]+)-([a-z]+)-([0-9]+)\/([a-z]+)-([a-z]+)-([0-9]+)$/i",$string2)) 

'i' 的到底是用於區分大小寫。

+0

Plz,在第二正則表達式中跳過'/'符號 – user4035

+0

哦......謝謝。 –

+0

謝謝。我只是舉一個例子,但字符串很長,我無法使用它。例如:a-b-c-d-3表示第一個字符串,e-a-b-c-d/b-d-e-r-f-4等。我運行你的代碼,並得到一個錯誤解析錯誤:語法錯誤,意想不到的'if'(T_IF)在C:\ xampp \ htdocs \ demo \ preg_match.php –

1

正則表達式與解釋。一步一步解決。

$text1='mobile is for you--phone-341/nokia-asha-253'; //sample string 1 
$text2='mobile-phone-341'; //sample string 2 

    $regular_expression1='(\w)'; // Word    (mobile) 
    $regular_expression2='(-)'; // Any Single Character   (-) 
    $regular_expression3='(\w)'; // Word    (phone) 
    $regular_expression4='(-)'; // Any Single Character   (-) 
    $regular_expression5='(\d+)'; // Integer Number   (341) 

    $regular_expression6='(\/)'; // Any Single Character   (/) 

    $regular_expression7='(\w)'; // Word    (nokia) 
    $regular_expression8='(-)'; // Any Single Character   (-) 
    $regular_expression9='(\w)'; // Word    (asha) 
    $regular_expression10='(-)'; // Any Single Character   (-) 
    $regular_expression11='(\d)'; // Integer Number   (253) 

    if ($c=preg_match_all ("/".$regular_expression1.$regular_expression2.$regular_expression3.$regular_expression4.$regular_expression5.$regular_expression6.$regular_expression7.$regular_expression8.$regular_expression9.$regular_expression10.$regular_expression11."/is", $text1)) 
    { 
    echo "a-b-1/d-e-2 format string"; 
    } 
    else 
    { 
    echo "Not in a-b-1/d-e-2"; 
    } 
    echo "<br>------------------------<br>"; //just for separation 

if ($c=preg_match_all ("/".$regular_expression1.$regular_expression2.$regular_expression3.$regular_expression4.$regular_expression5."/is", $text2)) 
    { 
    echo "a-b-1 formate string"; 
    } 
    else 
    { 
    echo "Not in a-b-1 format"; 
    } 
+0

我試過你的代碼,但其他情況總是發生。我的兩個字符串可以是$ string1 ='a-b-1',$ string2 ='a-b-1/d-c-c3';或$ string1 ='a-b-d-f-g-a-z-z-c-1',$ string2 ='a-b-1/d-c-c-c-c-c-c-3'等等。 –

+1

@KillerWhale很好的閱讀了這段代碼。瞭解如何編寫自己的正則表達式非常容易。這是非常有趣的。:) 我認爲你可以達到你的需要,如果你明白它。只需要很少的改變。注意:這兩個代碼是你在你的問題中指定的格式.. –

+0

哦!我對我的失敗感到很抱歉。你是個好人。 –