2014-12-08 2 views
1

내가 RTTTL의 문자열에서 명령을 캡처하기 위해 노력하고있어이 같은 명령 :EOL 문자와 일치합니까?

2a4, 2e, 2d#, 2b4, 2a4, 2c, 2d, 2a#4, 2e., e, 1f4, 1a4, 1d#, 2e., d, 2c., b4, 1a4, 1p, 2a4, 2e, 2d#, 2b4, 2a4, 2c, 2d, 2a#4, 2e., e, 1f4, 1a4, 1d#, 2e., d, 2c., b4, 1a4 

내가 사용 정규식 내가 $이 EOL 때 여러 모드와 일치하는지 읽을 때,에 글로벌 및 여러 줄에 (\S+),|$입니다 그러나 이것은 일어나지 않습니다. 따라서 마지막 명령 인 1a4을 캡처 할 수 없으므로 줄을 끝냅니다. 다른 모든 명령은 그룹에서 캡처됩니다.

마지막 명령을 캡처하는 데 사용해야하는 정규식은 무엇입니까?

답변

0

다음과 같이 미리보기 또는 비 캡처 그룹을 추가하기 만하면됩니다. 그리고 캐릭터는 그룹 인덱스에서 원하는 얻을 1.

(\S+)(?:,|$) 

DEMO

또는

(\S+)(?=,|$) 

DEMO

당신은 내다을 사용하는 경우 또한 캡처 그룹을 할 필요가 없습니다 .

\S+(?=,|$) 

(?=,|$) 긍정적 예측은 일치 라인 앵커의 , 또는 종료 다음에해야한다고 주장한다. \S+은 하나 이상의 공백이 아닌 문자와 일치합니다.

+0

아하! 그게 효과가있어! 고마워, 나는 정규식에 꽤 새로왔다. 가능한 한 빨리 대답하겠습니다. –

0

다른 용액

$a = " 2a4, 2e, 2d#, 2b4, 2a4, 2c, 2d, 2a#4, 2e., e, 1f4, 1a4, 1d#, 2e., d, 2c., b4, 1a4, 1p, 2a4, 2e, 2d#, 2b4, 2a4, 2c, 2d, 2a#4, 2e., e, 1f4, 1a4, 1d#, 2e., d, 2c., b4, 1a4"; 
$r=explode(",",preg_replace("/\\s+/","",$a)); 
var_dump($r); 

출력 :

array (size=37) 
    0 => string '2a4' (length=3) 
    1 => string '2e' (length=2) 
    2 => string '2d#' (length=3) 
    3 => string '2b4' (length=3) 
    4 => string '2a4' (length=3) 
    5 => string '2c' (length=2) 
    6 => string '2d' (length=2) 
    7 => string '2a#4' (length=4) 
    8 => string '2e.' (length=3) 
    9 => string 'e' (length=1) 
    10 => string '1f4' (length=3) 
    11 => string '1a4' (length=3) 
    12 => string '1d#' (length=3) 
    13 => string '2e.' (length=3) 
    14 => string 'd' (length=1) 
    15 => string '2c.' (length=3) 
    16 => string 'b4' (length=2) 
    17 => string '1a4' (length=3) 
    18 => string '1p' (length=2) 
    19 => string '2a4' (length=3) 
    20 => string '2e' (length=2) 
    21 => string '2d#' (length=3) 
    22 => string '2b4' (length=3) 
    23 => string '2a4' (length=3) 
    24 => string '2c' (length=2) 
    25 => string '2d' (length=2) 
    26 => string '2a#4' (length=4) 
    27 => string '2e.' (length=3) 
    28 => string 'e' (length=1) 
    29 => string '1f4' (length=3) 
    30 => string '1a4' (length=3) 
    31 => string '1d#' (length=3) 
    32 => string '2e.' (length=3) 
    33 => string 'd' (length=1) 
    34 => string '2c.' (length=3) 
    35 => string 'b4' (length=2) 
    36 => string '1a4' (length=3)