문제
다음 코드:
$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 에".
나는 무엇이 없는가?
감사합니다.
해결책
나는 생각을 내가 찾는 이유입니다.
- 귀하의 지명은 역참조은 선택사항입니다.
- 과 일치하는 경우(그 첫 번째 시도에서 그들이 할 수)후,정규식 엔진은 서 왼쪽에"LPAREN".
- 다음 토큰 regex 엔진에 맞추려고 노력은 공백 문자를 나타냅니다.이 때문에 식 좌측
(?<=LPAREN)
하지 않는 소비자의 문자열입니다. - 그것이 일치할 수 없기 때문에 공간이 있 L
- Regex 엔진을 삭제 옵션에서 일치하는지 2.과 간에 발견될 때까지 다음의 공간입니다.
- 그것은 경기고 유지 일치하는 그때부터 캡처,모든
P
s.하지만 이라는 그룹을 받게 될까지에 대한 이해 작동합니다.
나는 확실하지 않다 왜 당신이 필요 좌측.는 방법에 대
/(?P<ruleName>NAME )?(?P<funcName>FUNC )?(?:LPAREN )(?:(?P<arg1>P))|(?P<args>P)(?=(?: RPAREN)|(?: COMMA))/
제휴하지 않습니다 StackOverflow