次のコードを使用します。
$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);
$target 内の NAME、FUNC、および各 P の位置を取得する必要があります (つまり、PREG_OFFSET_CAPTURE)。このパターンは Ps に対して機能しますが、名前付きグループ「ruleName」または「funcName」のいずれとも一致しません。
私は何が欠けていますか?
ありがとう。