정규식을 사용하여 일부 입력을 구문 분석하려고합니다. 입력 형식이 될 것이다템플릿을 구문 분석하는 REGEX
someValue와 {3}
목적은 'SOM'(NO quotemarks)을 표시하는 것이다. 순간
, 나는이 : 내 템플릿 시스템과 함께 좋은 작품'echo' => array(
'search' => '~\{((?:'.$this->preg['var'].')(?:\.)?)\}~sU',
'replace' => "'.\$this->_get('\\1').'"
)
는, 표준 변수를 에코 (즉, 'someValue와'). 그러나 사용자가 : 구분 기호를 사용하여 출력 할 문자 수를 제한 할 수 있도록하고 싶습니다. 즉 {somevalue : 3}은 'som'을 표시합니다.
내가 시도 :'echo' => array(
'search' => '~\{((?:'.$this->preg['var'].')(?:\.)?:(.*)/)\}~sU',
'replace' => "'.substr(\$this->_get('\\1'),0,\\2).'"
)
하지만이 작동하지 않았다. 정규식을 이해하지 못해 정직하게 대응할 수 있도록 도와줍니다.
원래 {string}이 (가) 더 이상 작동하지 않는다는 것을 알았습니다. 이 문제를 해결하기 위해 'echolimit'이라는 배열의 새로운 요소이므로 기존 태그가 영향을받지 않도록 변경했습니다. 나는 당신의 코드를 시도했지만 작동하지 않았다. 나는 그것을 다음과 같이 변경했다 :''echolimit '=> array ( 'search '=>'~ \ {((? : '. $ this-> preg ['var '].') (? : \.)? : \\ 2 '). "" \t : \\ "~ \\ 2"). \t \t) '하지만 이제는 아무 것도 표시되지 않습니다 (기존의 다른 {tags}도 완벽하게 작동 함). – Amo
substr은 첫 번째 매개 변수를 문자열로, 두 번째를 오프셋으로, 세 번째 매개 변수를 길이로 취해야합니다. 귀하의 버전에는 $ this -> _ get ('\\ 2')를 사용하는 세 번째 매개 변수가 있지만 $ this -> _ get()은 표시 할 템플릿에서 태그 변수를 찾는 함수입니다. 이 경우에는 {stringtodisplay : limit} 태그에 다음에 전달 된 번호가 있어야합니다. – Amo
사용중인 템플릿 엔진에 대해 잘 모르기 때문에'$ this-> _get ('\\ 1')'은 $ this-> preg() 호출에서 첫 번째 캡처 그룹을 가져옵니다. 번호를 얻기 위해 두 번째 캡처 그룹을 추가하기 때문에 $ this -> _ get ('\\ 2')이이 작업을 수행한다고 가정했습니다. 내 코드 중첩 된 캡처 그룹이 필요하다는 것을 알았습니다. 이걸 시험해 볼 수 있니? ''echolimit '=> 배열 ('검색 '=>'~ \ {((? : '. $ this-> preg ['var '].') (? : \.)?) :([0-9 (\ $ this -> _ get ('\\ 1'), 0, \ $ this -> _ get ('\\ 2')).'')) –