2011-06-05 72 views
1

我想測試一個字符串是否由多個單詞組成並且在數組的末尾有任何值。以下是我目前爲止的內容。我堅持如何檢查字符串是否比正在測試的數組值更長,並且它出現在字符串的末尾。檢查是否有任何數組值存在於字符串的末尾

$words = trim(preg_replace('/\s+/',' ', $string)); 
$words = explode(' ', $words); 
$words = count($words); 

if ($words > 2) { 
    // Check if $string ends with any of the following 
    $test_array = array(); 
    $test_array[0] = 'Wizard'; 
    $test_array[1] = 'Wizard?'; 
    $test_array[2] = '/Wizard'; 
    $test_array[4] = '/Wizard?'; 

    // Stuck here 
    if ($string is longer than $test_array and $test_array is found at the end of the string) { 
     Do stuff; 
    } 
} 

回答

2

字符串的結尾是否意味着最後一個單詞?你可以使用的preg_match

preg_match('~/?Wizard\??$~', $string, $matches); 
echo "<pre>".print_r($matches, true)."</pre>"; 
+0

這很好用!我添加了忽略情況,但這很簡單,並完成了工作。 'if(preg_match('〜/?Wizard \ $ $〜i',$ string)){' – Matthew 2011-06-05 15:42:50

0

這是你想要的(不保證正確性,無法測試)?

foreach($test_array as $testString) { 
    $searchLength = strlen($testString); 
    $sourceLength = strlen($string); 

    if($sourceLength <= $searchLength && substr($string, $sourceLength - $searchLength) == $testString) { 
    // ... 
    } 
} 

我想知道一些正則表達式在這裏沒有更多意義。

2

我想你想是這樣的:

if (preg_match('/\/?Wizard\??$/', $string)) { // ... 

如果它是一個任意陣列(不包含你在你的問題中提供的「嚮導」字符串的一個),你可以動態構造正則表達式:

$words = array('wizard', 'test'); 
foreach ($words as &$word) { 
    $word = preg_quote($word, '/'); 
} 
$regex = '/(' . implode('|', $words) . ')$/'; 
if (preg_match($regex, $string)) { // ends with 'wizard' or 'test' 
+0

感謝你們,第二部分關於任意數組將有助於我在不久的將來需要做的事情。 – Matthew 2011-06-05 15:46:52

相關問題