IT story

Regex : 다른 컨텍스트에서 줄 시작 / 줄 끝 기호 (^ 또는 $) 사용

hot-time 2020. 12. 29. 07:56
반응형

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가 필요하지 않습니다.

다음 사항을 확인하십시오.

  1. 문자열이 같으면 garp(목록의 유일한 항목)
  2. 경우 garp,의 위치는 1 문자열 (0 위치를 즉) (목록의 첫 번째 항목)
  3. 경우가 ,garp있다에서 LENGTH(string)- LENGTH(',garp')[1]의 위치 (목록에서 마지막 항목)
  4. 문자열에 ,garp,(목록 중간에) 포함되어 있는 경우

[1] 아마도 여기에서 하나의 오류 일 수 있습니다.

참조 URL : https://stackoverflow.com/questions/2552428/regex-use-start-of-line-end-of-line-signs-or-in-different-context

반응형