2014-04-22 22 views
1

我有以下代碼,它可以在單輸入下工作,但在複合輸出時失敗。 打印數組函數確認數組值正確。我不知道問題出在哪裏。PHP正則表達式不能與數組字符串一起使用

單輸入:

1:10pm[Sat & Sun Only] 

複合輸入:

10:35am, 12:40pm, 1:10pm[Sat & Sun Only] 

代碼摘錄低於:

function function1($input) 
{ 
    $key1 = ', '; 
    if (strpos($input, $key1) !== false) { 
     $commas = substr_count($input, $key1); 
     $arraySize = $commas + 1; 
     $result1 = explode($key1, $input); 
    } else { 
     $result1[0] = $input; 
    } 
    foreach ($result1 as $val) { 
     if (preg_match('/^\d{1,2}.\d{2}am\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)) { 
      echo "Match was found <br />"; 
     } else if (preg_match('/^\d{1,2}.\d{2}pm\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)) { 
      echo "Match was found 2<br />"; 
     } else if (preg_match('/^\d{1,2}.\d{2}am\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun)-(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)) { 
      echo "Match was found 3<br />"; 
     } else if (preg_match('/^\d{1,2}.\d{2}pm\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun)-(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)) { 
      echo "Match was found 4<br />"; 
     } else if (preg_match('/^\d{1,2}.\d{2}am\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun) & (?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)) { 
      echo "Match was found 5<br />"; 
     } else if (preg_match('/^\d{1,2}.\d{2}pm\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun) & (?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)) { 
      echo "Match was found 6<br />"; 
     } else { 
      echo 'Not found '; 
     } 
     //print $val; 
    } 
    print_r($result1); 
} 
$imran = '10:35am, 12:40pm, 1:10pm[Sat & Sun Only]'; 
function1($imran); 
+0

您的預期產出是多少?我認爲你的代碼可以優化爲只使用一個正則表達式。另外'function1'對於一個函數來說是一個糟糕的名字。如果你不能想到一個功能的好名字,那麼這個功能可能會做一些非常奇怪的事情,或者太多的事情。 – Halcyon

+0

你究竟想用這段代碼實現什麼?可能有更好的方法來做到這一點。 –

回答

2

你不檢查與正則表達式的數組中的值。這裏是你擁有的一切:你是在爲你的呼叫使用$inputpreg_match

foreach($result1 as $val){ 
    if (preg_match('/^\d{1,2}.\d{2}am\[(?:Mon|Tues|Wed|Thurs|Fri|Sat|Sun).Only\]$/', $input)){ 
... 

通知。我認爲應該是$val

相關問題