2010-06-13 9 views
1
<?php 
$str = '17:30 Football 18:30 Meal 20:00 Quiet'; 
$chars = preg_split('/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); 
print_r ($chars); 
?> 

반환 :PHP는 preg_split/정규식

Array ( 
    [0] => Array ( 
    [0] => Football 
    [1] => 7 
) 
    [1] => Array ( 
    [0] => Meal 
    [1] => 22 
) 

    etc. 

내가 무엇을 할 수

Array ( 
    [0] => Array ( 
    [0] => 17:30 Football 18:30 Meal 20:00 Quiet 
    [1] => 0 
) 
) 

나는 기대했다 동안? 그들이 문자열의 시작에서 시작하고 문자열의 끝에서 끝 분할 문자열을 필요로 정규식 일치하지 않을 수 있습니다 장소에서 그들과 함께 -

+0

정규 표현식을 게시 할 수 있습니까? –

답변

1

당신은 앵커 ^과 정규식 주위 $을 드롭 할 필요가 - 귀하의 입력이 17:30 인 경우에만 이것이 사실 일 수 있습니다.

또한 텍스트 줄의 스캔하는 각각 ^$ 기호는 시작과 끝 부분에 앵커 정규식에서

$chars = preg_split('/\s*([0-1][0-9]|2[0-3]):([0-5][0-9])\s*/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); 
+0

정말 고마워요. 완벽하게 작동합니다. – user359294

0

처럼, 당신의 정규식에서 공백 문자를 포함 할 수 있습니다 . 패턴에서 제거해보십시오. 이 탈출해야합니다, 그래서 : 특수 문자는 정규 표현식에 있음을 잊지 마십시오

 
<?php 
$str = '17:30 Football 18:30 Meal 20:00 Quiet'; 
$chars = preg_split('/(?:[01]\d|2[0-3]):(?:[0-5]\d)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); 
print_r ($chars); 
?> 

: 어쩌면 뭔가를하려고합니다.

기본적으로 모두 브래킷이있는 그룹은 기억되지만 ?: 구문으로이를 중지 할 수 있습니다. 파이썬으로 표현식을 테스트했기 때문에 그것이 PHP에서 문제를 일으킬 지 모르지만, 배열에서 일치가 반환되지 않도록해야합니다.

또한 자동으로 단어 주위의 공백을 제거하기 위해서 약간 표현을 확장 할 수 있습니다

 
$chars = preg_split('/\s*(?:[01]\d|2[0-3]):(?:[0-5]\d)\s*/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); 

희망이 도움이!

+0

':'는 정규식에서 특수 문자가 아닙니다. 또한, PHP 정규식에서 백 슬래시를 벗어나지 마십시오. 그렇지 않으면 리터럴 백 슬래시가 발생합니다. –

+0

실수로,'? :'문법으로 가정합니다. – DuFace

0

또는 :

$chars = preg_split('/\b[0-9:\s]{6,7}\b/', $str,-1,PREG_SPLIT_OFFSET_CAPTURE);

이 선행 공백을 제거합니다.