2013-08-14 2 views
2

PHP에서 정규 표현식을 사용하여 .X12 파일의 일부 데이터를 구문 분석하려고합니다. 패턴은 대문자 인 FS과 정확히 13 자의 숫자입니다. PROCUREMENT333RFQ3PO100011EAFS8340015381823PKGFSHALLPHP에서 정규식이있는 .X12 파일을 구문 분석하여 대문자 'FS'다음에 정확히 13 개의 숫자를 찾으려고합니다.

내가 'FS8340015381823'및 기타 파일에서 13 개 숫자의 다른 변화를 추출해야합니다 : 여기

일부 텍스트의 예입니다.

$regex = '/FS[0-9]{13}?/'; 
preg_match($regex, $x12, $matches); 
var_dump($matches); 

나도 해봤이 정규식 패턴 : 여기

나를 위해 작동하지 않는 코드

$regex = '/FS8340015381823/'; 
$regex = '/FS\d{13}?/'; 

내가 예를 들어 문자열을 저장하는 경우의 잘 작동이 정규식의 모든 preg_match()을 실행하기 전에 $ x12 변수에 위의 값을 추가하지만 내용을로드 할 때 원시 파일에서는 작동하지 않습니다. 화면에 .X12 파일 내용이 echo 일 때, 위 예제처럼 사용했던 정확한 문자열을 볼 수 있습니다. 정규식 /FS/을 사용하면 'FS'를 찾습니다.

이 regexc 원시 파일 데이터에 작동하지만 'FS'후 단지 숫자없는 일치를 반환

$regex = '/FS.{13}?/'; 

내 컴퓨터에 단말기가 표시되지 않는 이상한 문자가있을 수 있습니다 ? 저는 Amazon EC2에서 Linux CentOS를 실행하고 있습니다.

+0

? 귀하의 정규식에서 ... 이것은 경기를 선택적으로 만듭니다. – Orangepill

+1

헥스 에디터로 확인해 보았습니다. 그렇게하면 야생 문자를 감독하지 않을 것입니다. BTW '/ FS. {13}/s'의 결과는 무엇입니까? – HamZa

+0

_ "내 컴퓨터의 터미널이 표시되지 않는 이상한 문자가있을 수 있습니까?"_ => 좋아하는 16 진수 편집기에서 엽니 다. – Wrikken

답변

2

@HamZa의 도움과 자신의 데이터를 분할하기위한 OP 덕분에. 당신이 당신의 데이터에 여러 hex이있는 경우

당신은 당신이 문자 클래스를 사용할 수 /FS\x1d[0-9]{13}/ 또는 /FS\x1d\d{13}/

를 사용할 수 있습니다.

/FS[\x00-\x1f]\d{13}/ 
+2

이 답변을 확장하기 위해 원본 파일 내용의 문제점은 터미널에서 화면으로 출력하거나 표준 텍스트 편집기에서 볼 때 보이지 않는 문자가 포함되어 있다는 것입니다. 이 파일을보기 위해서 파일 내용을 16 진수로 변환해야했습니다 (PHP에서는'bin2hex()'). 그것은 그룹 구분자 문자로 16 진수의 '1d'와 아스키의 '29'문자입니다. 이 GD 문자는 'FS'와 내가 검색 한 숫자 사이에 존재합니다. –

관련 문제