
현재 올바른 콘텐츠를 얻기 위해 입력 파일을 구문 분석하는 일부 정규식을 작업 중입니다. 일부 입력을 구문 분석하기 위해 다음 정규식을 사용하고 있습니다.
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(?:-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD))-[a-z]
다음과 일치해야 합니다.
cell-80-sandp-sit-a
또는 이것을 일치시키십시오:
cell-80-sandp-a
-sit
입력 부분은 다음과 같아야합니다.임의로 선택할 수 있는제가 이해하는 바에 따르면 그룹 캡처는 RegExp가 이 캡처 그룹을 찾을 수 없는 경우 성공적으로 계속 진행되거나 그룹을 찾으면 성공적으로 완료된다는 의미입니다.
이 예에서는 if 문에서 이를 사용하겠습니다.
if [[ "$Input" =~ $RegExp ]];
then
#stuff
fi
누구든지 위의 문제를 지적할 수 있습니까? 테스트용으로 사용해 봤습니다 regex101.com
.
답변1
bash
PCRE("Perl 호환 정규식")가 아닌 표준 확장 정규식("ERE")을 이해하세요.
귀하의 PCRE:
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(?:-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD))-[a-z]
PCRE (?:...)
는 비캡처 그룹(선택 그룹 아님)입니다. ERE에는 동등한 것이 없으며 모든 그룹이 캡처하고 있습니다.
표현식을 선택 사항으로 만들려면 ?
아래에서 수행한 것처럼 으로 표현식을 한정할 수 있습니다. 이는 ?
이전 표현식이 한 번 또는 0번 일치해야 함을 의미합니다.
ERE로:
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)?-[a-z]
아니면 (SIT[a-z]|SIT[1-9])
계약을 맺고 SIT[a-z1-9]
,
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD)(-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD))?-[a-z]
여기에 앵커를 추가할 수도 있습니다.
^cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD)(-(DEV|DEVL|SANDP|CAT|SIT[a-z1-9]|TAT|PROD))?-[a-z]$
...그렇지 않으면 일치할 것입니다somethingcell-...-ablahblah
답변2
(?:...)
선택적 캡처 그룹이 아니라 비 캡처 그룹이며, 내가 아는 한 bash는 이를 지원하지도 않습니다. 이것은 작동합니다:
cell-(90|855|80|70)-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD)(-(DEV|DEVL|SANDP|CAT|(SIT[a-z]|SIT[1-9])|TAT|PROD))?-[a-z]