여러 개의 열 값을 검사하는 정규식 목록이 있습니다. 열은 탭 구분 기호로 구분됩니다. 필자는 32 개의 열과 12 개의 열을 필요로합니다. 그래서 내 파일에 총 44 개의 열이 있다면 목록 전체를 실행해야하지만 32 개가있는 경우 나머지 목록을 선택적으로 만들려고합니다. 내가 44 열이있는 경우에만 내가 그들을 사용할 수있는 방법은 내 목록에서 이러한 추가 열을 선택 할 수 있을지 궁금하네요특정 위치에서 정규 표현식을 선택하는 방법은 무엇입니까?
<cfset myRegex = "^[A-Za-z '-]{1,20}\t[A-Za-z '-]{1,20}\t(0?[1-9]|1[0-2])\/(0?[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}\t([M|F])\t(0?[0-9]|1[0-2]|PK)\t[A-Za-z0-9 ]{0,50}\t[A-Za-z0-9 ]{0,50}\t\d{10}(\t[^\t]*){22}\t([0-9]{4})\t([^\t]*)\t([A-Za-z '-]{1,20}|NULL)\t([A-Za-z '-]{1,20}|NULL)\t([A-Za-z0-9 '-.;]{1,100}|NULL)\t([A-Za-z '-]{1,50}|NULL)\t(\b([A-Z]{2})\b|NULL)\t(\b\d{5}(-\d{4})?\b|NULL)\t(\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})|NULL)\t(\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})|NULL)\t(\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})|NULL)\t(\d+|NULL)\t([A-Za-z '-]{1,50}|NULL)\t((([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}|NULL)\r?$">
: 여기 내 정규 표현식입니다. 각각의 옵션 컬럼 이후에 ?
을 넣으려고했으나 작동하지 않았다. 나의 정규식은 그 경우에 false를 출력하고 있었다. 여기
<cfset fileRegex = "^[A-Za-z '-]{1,20}\t[A-Za-z '-]{1,20}\t(0?[1-9]|1[0-2])\/(0?[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}\t([M|F])\t(0?[0-9]|1[0-2]|PK)\t[A-Za-z0-9 ]{0,50}\t[A-Za-z0-9 ]{0,50}\t\d{10}(\t[^\t]*){22}\t([0-9]{4})\t(([^\t]*)\t)?(([A-Za-z '-]{1,20}|NULL)\t)?(([A-Za-z '-]{1,20}|NULL)\t)?(([A-Za-z0-9 '-.;]{1,100}|NULL)\t)?(([A-Za-z '-]{1,50}|NULL)\t)?((\b([A-Z]{2})\b|NULL)\t(\b\d{5}(-\d{4})?\b|NULL)\t)?((\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})|NULL)\t)?((\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})|NULL)\t)?((\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})|NULL)\t)?((\d+|NULL)\t)?(([A-Za-z '-]{1,50}|NULL)\t)?(((([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}|NULL))?\r?$">
이 잘 작동하지 않았다. 데이터와
예 :
<cfset myData = "Ruiz John 09/01/1984 M 00 Red Star player 3345678879 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19234 1011 0089 01">
<cfif REFind(fileRegex,myData,true) GT 0>
true<br>
<cfelse>
false<br>
</cfif>
정규식에 24 개가 포함되어 있습니다. '\ t'. 사실, 당신이 필요로하는 것이 명확하지 않고 패턴이 너무 길어서 샘플 문자열 없이는 디버그가 불가능합니다. –
@ WiktorStribiżew 만약 당신이 7 번째 줄을 잘 살펴 본다면 \ t 안에 22 개의 컬럼을 포함하고있는 {22}을 나타냅니다. (\ t [^ \ t] *) {22} 나는 그 분야에 대해 엄격한 검증을 사용하지 않았다. 탭이 없는지 확인하는 것뿐입니다. –
[here] (https://regex101.com/r/FJVdso/1) 표현식을 사용해보십시오. 나는 당신의 정규식이 거의 옳다고 가정한다. (정말로, 나는 그것을 제대로 디버깅하는 방법을 알 수 없다.하지만 아무도 할 수 없다.)'\ t'가 의무적 인 그룹에 배치되는 곳을 발견했다. (아마도 나는 모든 데이터를 필요로하지는 않는다). –