2014-04-22 3 views
1

i 다음 코드를 사용하면 단일 입력에서는 작동하지만 복합 출력에서는 실패합니다. print 배열 함수는 배열 값이 올바른지 확인합니다. 문제가 어디 있는지 모르겠습니다.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

예상되는 결과는 무엇입니까? 나는 당신의 코드가 단지 하나의 regexp를 사용하도록 최적화 될 수 있다고 생각한다. 또한'function1'은 함수의 끔찍한 이름입니다. 함수에 대한 좋은 이름을 생각할 수 없다면 그 함수는 아주 이상하거나 너무 많은 것을 할 것입니다. – Halcyon

+0

이 코드를 사용하여 정확히 달성하려는 것은 무엇입니까? 아마 이것을하는 더 좋은 방법이있을 것입니다. –

답변

2

당신은 정규 표현식과 배열의 값을 확인하지 않는 . 당신이 preg_match에 호출 $input을 사용하고

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

공지 사항 : 여기에 당신이 무엇을. 나는 그것이 $val이어야한다고 생각한다.

관련 문제