Regex : 다른 컨텍스트에서 줄 시작 / 줄 끝 기호 (^ 또는 $) 사용
약간의 정규식 작업을 수행하는 동안이 문제가 발생했습니다. 예를 들어 다음과 같은 태그 목록 인 문자열이 있습니다.
foo,bar,qux,garp,wobble,thud
내가해야 할 일은 특정 태그 (예 : 'garp')가이 목록에 있는지 확인하는 것이 었습니다. (마지막으로 일치하는 것이 일치하는지 여부에 따라 실제로 중요하지 않습니다.)
내 첫 번째이자 약간 어리석은 시도는 다음 정규식을 사용하는 것입니다.
[^,]garp[,$]
내 생각은 'garp'앞에는 줄 / 문자열의 시작이나 쉼표가 있어야하고, 'garp'뒤에는 쉼표 나 줄 / 문자열의 끝이 있어야한다는 것입니다.
이제이 정규식이 잘못되었음을 즉시 알 수 있습니다. ^ 및 $ 둘 다 문자 클래스 []의 컨텍스트에서 동작을 변경합니다.
내가 마침내 생각 해낸 것은 다음과 같습니다.
^garp$|^garp,|,garp,|,garp$
이 정규식은 4 개의 경우를 하나씩 처리합니다. (목록의 시작 부분, 중앙, 끝 부분 또는 목록의 유일한 요소로 태그를 지정합니다.) 마지막 정규식은 내 눈에 다소 추악하며 재미를 위해 조금 만들고 싶습니다. 더 우아합니다.
줄의 시작 / 줄의 끝 문자 (^ 및 $)를 문자 클래스의 컨텍스트에서 사용할 수있는 방법이 있습니까?
편집 : 좋아, 더 많은 정보가 필요했기 때문에 여기에 있습니다 : Oracle SQL 문 내에서 이것을 사용하고 있습니다. 이것은 슬프게도 둘러보기 어설 션을 허용하지 않지만 일치가 있는지 여부 (그리고 일치하는 것이 아님)에만 관심이 있기 때문에 여기에서는 실제로 영향을 미치지 않습니다. 태그에는-또는 _와 같은 알파벳이 아닌 문자가 포함될 수 있으므로 \ bgarp \ b가 작동하지 않습니다. 또한 하나의 태그에는 SilentGhost가 말한 것처럼 다른 태그가 포함될 수 있으므로 / garp /도 작동하지 않습니다.
문자 클래스에서 원하는 방식으로 ^
및 $
문자 클래스를 사용할 수 없습니다. 문자 그대로 해석되지만 동일한 효과를 얻기 위해 교대로 사용할 수 있습니다.
(^|,)garp(,|$)
and \b
대신 단어 경계 ( ) 를 사용하면 됩니다 .^
$
\bgarp\b
이 문제를 해결하려면 둘러보기를 사용하십시오.
(?<=^|,)garp(?=$|,)
둘러보기 및 일반 그룹과의 차이점은 일반 그룹에서는 쉼표가 경기의 일부가되고 둘러보기에서는 그렇지 않다는 것입니다. 이 경우에는 차이가 없습니다.
저는 정규식 팬이지만이 경우 (쉼표로 구분 된 문자열) Mark Byers, SilentGhost 및 reko_t의 솔루션이 모두 작동하지만 CSV 파서를 살펴 보는 것이 좋습니다.
작업에 과잉 일 수 있지만 실제 요구 사항과 처리해야하는 실제 데이터를 알지 못합니다.
이것은 SQL INSTR
함수 (문자열 위치)로 상당히 최적화 될 수 있으며 Regex가 필요하지 않습니다.
다음 사항을 확인하십시오.
- 문자열이 같으면
garp
(목록의 유일한 항목) - 경우
garp,
의 위치는 1 문자열 (0 위치를 즉) (목록의 첫 번째 항목) - 경우가
,garp
있다에서LENGTH(string)
-LENGTH(',garp')
[1]의 위치 (목록에서 마지막 항목) - 문자열에
,garp,
(목록 중간에) 포함되어 있는 경우
[1] 아마도 여기에서 하나의 오류 일 수 있습니다.
'IT story' 카테고리의 다른 글
Google Play 스토어 내부 테스트를 시작할 수 없음 (0) | 2020.12.29 |
---|---|
C #에서 한 줄씩 파일 읽기 (0) | 2020.12.29 |
Eclipse의 검색에서 .svn 디렉토리를 제외하는 방법은 무엇입니까? (0) | 2020.12.29 |
JavaScript에서 JSP 변수 읽기 (0) | 2020.12.29 |
자바 스크립트로 SVG 이미지 색상 변경 (0) | 2020.12.29 |