정규식 옵션 문자를 일치시키는 방법
지금까지 올바르게 작동한다고 생각한 정규 표현식이 있습니다. 선택적인 캐릭터와 일치해야합니다. 있을 수도 있고 없을 수도 있습니다.
두 개의 줄이 있습니다. 상단 문자열은 일치하지만 하단 문자열은 일치하지 않습니다. 하단 문자열에 단일 문자가 없으면 실패합니다.
5 자리가 시작되면 한 글자를 받고 싶습니다. 그렇지 않으면 나머지 문자열을 계속 얻습니다. 이 편지는 가능합니다 A-Z
.
([A-Z]{1}) +.*? +
정규식에서 제거 하면 문자를 제외하고 필요한 모든 항목과 일치하지만 중요합니다.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
여기에 내가 사용하고있는 정규식이 있습니다.
/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/
사용하다
[A-Z]?
문자를 선택적으로 만들려면 {1}
중복됩니다. (물론 [A-Z]{0,1}
동일한 것을 의미하는 글 을 쓸 수도 있지만, 그것이 무엇인지에 대한 ?
것입니다.)
정규식을 향상시킬 수 있습니다.
^([0-9]{5})+\s+([A-Z]?)\s+([A-Z])([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})
그리고 대부분의 정규식 방언에서 \d
다음과 같습니다 [0-9]
.
^(\d{5})+\s+([A-Z]?)\s+([A-Z])(\d{3})(\d{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])\d{3}(\d{4})(\d{2})(\d{2})
그러나 11 개의 개별 캡처 그룹이 정말로 필요합니까? 그렇다면 네 번째에서 마지막 숫자 그룹을 캡쳐하지 않겠습니까?
?
다음과 같이 뒤에 하나를 추가하여 단일 문자를 선택적으로 만들 수 있습니다 .
([A-Z]{1}?)
수량 {1}
자는 중복되므로 삭제할 수 있습니다.
단일 문자도 옵션으로 표시해야합니다.
([A-Z]{1})? +.*? +
또는 전체 부분을 선택적으로 만드십시오
(([A-Z]{1}) +.*? +)?
원하는 (.*)\/(([^\?\n\r])*)
위치 $2
와 같은 경우에 맞게 설계된 더 간단한 정규식을 사용할 수도 있습니다 .
참고 URL : https://stackoverflow.com/questions/4007302/regex-how-to-match-an-optional-character
'Programming' 카테고리의 다른 글
Angular 2에서 경로를 탐색 할 때 로딩 화면 표시 (0) | 2020.07.28 |
---|---|
C ++에서 int와 long의 차이점은 무엇입니까? (0) | 2020.07.28 |
Firefox 및 Opera의 웹 폰트 스무딩 및 앤티 앨리어싱 (0) | 2020.07.28 |
C의 정수에서 가장 높은 세트 비트 (msb)를 찾는 가장 빠르고 효율적인 방법은 무엇입니까? (0) | 2020.07.28 |
컴파일 된 언어와 해석 된 언어의 차이점은 무엇입니까? (0) | 2020.07.28 |