2017-01-31 2 views
1

내가 좋아하는보고 로그 파일이 :"이메일 IP"정규식

'User_001','Entered server','[email protected]','2','','','0','YES','0','0',','0','192.168.1.1','192.168.1.2','0','0','0','0','0','0','0','0','0','1','0','','0','0','0','1' 
'User_002','Entered server','[email protected]','2','','','0','NO','0','0',','0','192.168.1.3','192.168.1.4','0','0','0','0','0','0','0','0','0','1','0','','0','0','0','1' 

또는

User_001 Entered server [email protected] 2 Pool_1 YES 0 0 0 192.168.1.1 192.168.1.2 0 0 0 0 0 0 0 0 0 1 0 0 1 
User_002 Entered server [email protected] 2 Pool_1 NO 0 0 0 192.168.1.3 192.168.1.4 0 0 0 0 0 0 0 0 0 1 0 0 1 

그리고 난 "이메일 IP"수출을위한 정규식을 만들려고 해요 내용을 포맷하십시오. 그 또한이 일치하는 문자열의 전체 콘텐츠를하기 때문에 작동하지 않습니다

([A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}(.*)([0-9]{1,3}[\.]){3}[0-9]{1,3}) 

그러나 물론 :

내가 좋아하는 정규식으로 시도했다.

어떻게 찾은 두 문자열 사이의 내용을 무시할 수 있습니까?

나는 그 정규식 부분을 성공시키지 않으려 고 노력했다.

미리 감사드립니다.

p.s. 나는이 사용 그렙을 할 필요가

+0

그래서 왜 CSV 파서를 사용하지 인용 CSV 같다고? –

+0

이것은 일반 텍스트 파일이며 csv :/ –

+2

이 아닙니다. CSV 파일은 쉼표로 구분 된 고정 된 순서로 값을 포함하는 일반 텍스트 파일입니다. 그렇지 않은가요? –

답변

0

이 (작동) 내 추한 정규식 솔루션입니다 :

그러나 코멘트에서 언급 한 바와 같이

([a-z0-9][email protected][a-z0-9.]+).*?([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) 

https://www.regex101.com/r/APfJS1/1

const regex = /([a-z0-9][email protected][a-z0-9.]+).*?([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/gi; 
 
const str = `User_001','Entered server','[email protected]','2','','','0','YES','0','0',','0','192.168.1.1','192.168.1.2','0','0','0','0','0','0','0','0','0','1','0','','0','0','0','1'`; 
 
let m; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
    // This is necessary to avoid infinite loops with zero-width matches 
 
    if (m.index === regex.lastIndex) { 
 
     regex.lastIndex++; 
 
    } 
 
    
 
    // The result can be accessed through the `m`-variable. 
 
    m.forEach((match, groupIndex) => { 
 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
 
    }); 
 
}
하십시오 아마도 좋은 CSV 파서가 더 좋을 것입니다!

PHP

$re = '/([a-z0-9][email protected][a-z0-9.]+).*?([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/i'; 
$str = 'User_001\',\'Entered server\',\'[email protected]\',\'2\',\'\',\'\',\'0\',\'YES\',\'0\',\'0\',\',\'0\',\'192.168.1.1\',\'192.168.1.2\',\'0\',\'0\',\'0\',\'0\',\'0\',\'0\',\'0\',\'0\',\'0\',\'1\',\'0\',\'\',\'0\',\'0\',\'0\',\'1\''; 

preg_match_all($re, $str, $matches); 

// Print the entire match result 
print_r($matches); 
+0

어쩌면 뭔가 잘못하고있어, 그 PHP와 함께 작동하지만 만약 내가 grep과 동일한 정규식을 다시 전체 성냥을 반환 실패 사용해야합니다. 예제 명령이 실행되었습니다. grep -E -o "([a-z0-9] + @ [a-z0-9.] +). *? ([0-9] {1,3} \. [0 [0-9] {1,3} \. [0-9] {1,3}) " a.txt –

+0

PHP 동등 물을 추가 하겠지만, 당신의 질문에있는 언어! –

+0

흠 .. 글쎄, grep에서 할 필요가있다. –

관련 문제