2016-06-30 1 views
-1

나는 다음과 같은 데이터 출력을 가지고 말할 수 있습니다 :정규식을 사용하여 그룹화 된 반복 문자열을 가져 오겠습니까?

0; root.; 0; MLG.; 247; root.; 249; MLG.; 2390; toasty.; ... someNumber; username.;

나는 숫자가 0이 아닌 경우에서 수를 무시하고 사용자 이름을 당겨과 이전 세미콜론 노력하고 있어요, 알 수없는 횟수 동안이 작업을 수행해야합니다.

root. MLG. toasty.

구문 펄 형식해야이 데이터에 관해서는 바람직하게는 출력으로 표시한다. 이것을 사용하는 응용 프로그램은 예외가 아닙니다. 이 데이터가 어떻게 표시되는지 (예 : 숫자 옆에있는 세미콜론을 제거하고 사용자 이름에 고유 한 숫자를 마침표로 붙이고 세미콜론으로 구분할 수 있음) 완벽하게 제어 할 수 있지만 그 방법을 알고 싶습니다. 이것에 관계없이.

나는 다음과 같다 시도한 많은 현재 정규식 등에서 특정 요소를 뽑아 오기의 일부

...

합니다 ((?<field>는 최종 > 경우 응용 프로그램에 의해 지정 및 표시 할 필드 이름 뒤에 정규식을 지정하는 것입니다 누구

  • 표시된 첫 번째 숫자는 0
없는 곳부터 마지막 ​​세미콜론 모든 데이터를 당긴) 궁금 "(?<users_online>[1-9].*;)"
  • 0이 아닌 숫자의 첫 번째 인스턴스와 세미콜론이 발생한 후 모든 데이터를 가져옵니다.

"[1-9];(?<users_online>.*?)"

  • 0이 아닌 숫자 및 콜론의 첫번째 인스턴스 결국 데이터를 가져 와서 다음 "단어"boundry까지 영숫자 값을 출력한다.

"[1-9];((?<users_online> \w+\b))"

일체의 도움도 감사합니다.

+0

0을 따르는 사용자 이름을 추출하고 가입하는 것이 더 간단하지 않습니까? –

+0

@CasimiretHippolyte이 해석 방법에서 허용되지 않습니다. 0을 따르는 사용자는 표시 할 수없는 사용자입니다. 나는 0이 아닌 수를 따르는 것에 만 관심이있다. – Jouster500

+0

별로 다르지 않다. –

답변

0

당신은 이런 식으로 작업을 수행 할 수 있습니다

my $s = "0; root.; 0; MLG.; 247; root.; 249; MLG.; 2390; toasty.; ... someNumber; username.;"; 
#           ^--- added 
print join " ", $s=~/[1-9]0*; ([^;]+)/g; 

는 당신은 결국 제로 앞에 0이 아닌 적어도 하나 개의 숫자를 설명하고 세미콜론을 제외 적절한 문자 클래스를 사용해야합니다.

+0

구문'/ [1-9] 0 *;을 사용해 보겠습니다. ([^;] +)/g;'. 저와 다른 사람이 이것을 시도한 마지막 순간에 의문의 여지가 있습니다. 응용 프로그램이 '1'이 의미하는 것을 식별 할 수 없으므로 실패했습니다. – Jouster500

+0

불행히도 이것은 잘못된 것입니다. 나는'(? )'을 지정해야한다고 언급 했어야했다. 정규식을 그룹 이름 앞뒤에 변경하려고 시도했지만 아무 정보도 제공하지 않습니다. – Jouster500

+0

내가 무엇을 하려는지 모르겠다. 조금 애매하다. https://eval.in/598580 –