문제

다음 코드:

$target = 'NAME FUNC LPAREN P COMMA P COMMA P RPAREN';
//$target = 'NAME FUNC LPAREN P RPAREN';
//$target = 'NAME FUNC LPAREN RPAREN';
$pattern = '/(?P<ruleName>NAME )?(?P<funcName>FUNC )?(?:(?<=LPAREN)(?: (?P<arg1>P))|(?P<args>P)(?=(?: RPAREN)|(?: COMMA)))/';

preg_match_all($pattern,$target,$matches,PREG_OFFSET_CAPTURE|PREG_PATTERN_ORDER);

내가 필요 위치의 이름,FUNC 및 각 P 에$target(따라서 PREG_OFFSET_CAPTURE).패턴에 대한 작품 Ps 하지만,일치하지 않을 중 하나라는 그룹"ruleName"또는"funcname 에".

나는 무엇이 없는가?

감사합니다.

도움이 되었습니까?

해결책

나는 생각을 내가 찾는 이유입니다.

  1. 귀하의 지명은 역참조은 선택사항입니다.
  2. 과 일치하는 경우(그 첫 번째 시도에서 그들이 할 수)후,정규식 엔진은 서 왼쪽에"LPAREN".
  3. 다음 토큰 regex 엔진에 맞추려고 노력은 공백 문자를 나타냅니다.이 때문에 식 좌측 (?<=LPAREN) 하지 않는 소비자의 문자열입니다.
  4. 그것이 일치할 수 없기 때문에 공간이 있 L
  5. Regex 엔진을 삭제 옵션에서 일치하는지 2.과 간에 발견될 때까지 다음의 공간입니다.
  6. 그것은 경기고 유지 일치하는 그때부터 캡처,모든 Ps.하지만 이라는 그룹을 받게 될까지에 대한 이해 작동합니다.

나는 확실하지 않다 왜 당신이 필요 좌측.는 방법에 대

/(?P<ruleName>NAME )?(?P<funcName>FUNC )?(?:LPAREN )(?:(?P<arg1>P))|(?P<args>P)(?=(?: RPAREN)|(?: COMMA))/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top