2013-11-20 3 views
2

나는 여기에 perl 정규 표현식 문제가 많이 있다는 것을 알고있다. 나는 내 상황에서 나를 돕는 것을 찾을 수 없었다. 나는 다음과 같은 문자열이 있습니다perl - 정규 표현식을 사용하여 부분 문자열을 얻는다

string = "dn: example\nl: example\ndepartment: example\nname: example" 

내가 (DN 제외) 각 필드를 추출하려고 사용하여 다음

my ($name) = $output_string =~ /name:\s(\w+)\n/; 
my ($department) = $output_string =~ /department:\s(\w+)\n/; 
my ($location) = $output_string =~ /location:\s(\w+)\n/; 

내가 그 아니기 때문에, 정규식을 사용하는 방법을 이해되어서는 안 나를 위해 일해. 각 변수는 정의되지 않은 상태로 끝납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

는 멀티 라인 모드를 전환 할 수있는 m 플래그를 추가하고 사용의-라인 시작 -의 라인 끝은 문자열의 라인의 시작/끝 일치 앵커 :

my ($name)  = $output_string =~ /^name:\s(\w+)$/m; 
my ($department) = $output_string =~ /^department:\s(\w+)$/m; 
my ($location) = $output_string =~ /^location:\s(\w+)$/m; 
1

을 여기서 문제는 입력입니다. name: 이후에 \n이 올 것으로 예상되지만 location:을 찾고 있지만 l:을 입력하십시오.

/m 플래그를 사용 $은 라인의 단부 또는 입력의 양 단부에 일치하므로 대신 \n$은, 상기 제 문제를 해결할 것이다.

관련 문제