중괄호 안에 표현식 목록이있는 문자열이 있습니다. 배열로 분할하여 세부 사항을 얻고 싶습니다. 나는 이런 식으로 시도했다.perl을 사용하여 중첩 된 중괄호 안에 값을 가져 오는 방법
#!/usr/bin/perl
sub main() {
my $string = <STDIN>;
while ($string =~ /(\((?:(?1)|[^()]*+)++\))|[^()\s]++/g)
{
print "$&\n"
}
main();
InPut : (+ (+ 4 3) (- 3 2) 5)
Output should be : (+ (+ 3 4) (- 2 3) 5)
(+ 3 4)
(- 2 3)
나는 배열에 저장하려고 시도하고 다음 seply .. 평가하지만 확실하지 그게 올바른 방법.
기본적으로 아래와 같이 표현식을 평가하려고합니다.
4+3 =7 , 3-2 =1 , and then 7+1+5 = 13
Final output should be 13
아무도 친절하게 도와 드릴 수 있습니까?
, 당신은'같은 여러 캡처를 얻을 수없는 것처럼 + (.) '(마지막 문자 만 얻는다). 가장 바깥 쪽 대괄호와 일치 할 수 있으며 해당 내용을 반복적으로 계속 일치시킬 수 있습니다. 하지만 수동으로 이런 식으로 해석하는 것이 더 쉽다고 생각합니다. [이것 좀 봐] (http://www.perlmonks.org/?node_id=997089) –
@ m.buettner : 그다지 어렵지는 않지만 내 대답은 아래를 보라. –
영업 사원이 무제한 중첩을 찾고 있다면 매우 어렵습니다. 정규 표현식은 제한없는 중첩을 수행 할 권한이 없습니다. 파서, 즉 푸시 다운 스택이있는 유한 상태 자동화 만이 작업을 수행 할 수 있습니다. – shawnhcorey