Perl에서 구문 분석하는 일부 데이터가 있으며 가까운 시일 내에 점점 더 형식이 다른 데이터가 추가 될 것입니다. 내가 뭘하고 싶은지는 문자열과 정규 표현식을 전달할 수있는 사용하기 쉬운 함수를 작성하는 것이고 괄호 안에는 아무것도 반환하지 않을 것이다. 그것은이 (의사)과 같이 작동합니다 :펄 정규식에서 n 개의 괄호가 일치합니다.
sub parse {
$data = shift;
$regex = shift;
$data =~ eval ("m/$regex/")
foreach $x ($1...$n)
{
push (@ra, $x);
}
return \@ra;
}
그럼,이처럼 호출 할 수 있습니다 당신이 볼 수 있듯이
@subs = parse ($data, '^"([0-9]+)",([^:]*):(\W+):([A-Z]{3}[0-9]{5}),ID=([0-9]+)');
,이 코드에 문제가 몇 가지있다. 평가가 작동하는지, 'foreach'가 제대로 작동하지 않을지, 그리고 얼마나 많은 괄호가 있는지 모른 채 루프 할 횟수를 모르겠습니다.
이것은 분할하기에 너무 복잡하기 때문에 간과 할 수있는 다른 기능이나 가능성이 있다면 알려주십시오.
도움 주셔서 감사합니다.
정규식에 괄호가 있는지 여부를 모르는 경우 (기본 전체 일치 문자열 대신) 아무 것도 반환하지 않으려면 추가 세트를 추가하십시오.'$ string = ~/(regex) /' 결과에서이를 버립니다. – ysth
그 grep은 실제로 일치하지 않는 괄호를 걸러 내고, 길이가 0이 아닌 괄호를 걸러 낼 것입니다. (정의되고 "") – ysth
@ysth => 맞습니다. –