정규식과 특수 문자 일치


10

소문자와 숫자가 포함 된 것을 찾으려면 매우 쉽다고 가정하십시오.

produce_text | grep -E '[0-9a-z]'

대괄호는 일련의 문자를 일치시키는 데 유용하지만 다소 특수한 문자는 어떻습니까?
대괄호를 사용하려면 닫는 대괄호 , 대시 (또는 하이픈) "-", 슬래시 및 캐럿 , 콜론 중 하나를 제외한 모든 문자를 일치 시키십시오 . 다음과 같이 보일까요 (작동하지 않는 것을 알고 있습니까)?]/\^:

[^]-/ \ ^ :]

답변:


11

대괄호 표현식 에서 리터럴 ]과 리터럴을 일치 시키려면 다음과 같이 사용해야합니다.-

[^]/\^:-]

또는 일부 도구는 백 슬래시를 이스케이프 처리해야 하므로 더 좋습니다 .

[^]/\\^:-]


, 오른쪽 대괄호 ( ']')는 목록에서 처음 (초기 '^'후)이 발생하면 특수한 의미를 잃고 대괄호 표현식으로 표시
되며
하이픈 빼기 문자는 처음 발생하면 그 자체로 처리 (후있는 경우, '^'초기) 목록 또는 최근
따라서
브래킷 발현 모두 지정하는 경우 - 후 (그리고 ']'는 ']가'먼저 배치한다 ' '^'(있는 경우) 및 '-'는 대괄호 표현식 내에서 마지막입니다.
대괄호 식의 규칙은 EREBRE 와 동일합니다 .


2
안전한쪽에 있도록 백 슬래시를 두 배로 늘 렸습니다. 많은 awk구현과 예 perl를 들어 필요합니다.
Stéphane Chazelas

"캐럿에서 닫는 브래킷으로"는 어떻습니까? 마찬가지로 [^-]](이 하나가 실패)?
iBug

2
@iBug-문자 그대로 일치 시키려면 오른쪽 대괄호가 먼저 있어야하므로 실패합니다. 나는 확실히 당신이 등이 언급하는 "범위"의 요점을 파악 아니에요 ^이후 ]지금 [^-]]에도 모두있는 경우 작동하지 않을 것입니다 ^](처럼 문자 그대로 치료를 받았다 [b-a]). 어쨌든 예 ;를 들어 닫는 대괄호 와 일치 시키려면 이전 문자까지의 범위 ](백 슬래시) ]를 사용하고 대괄호 표현식에서 첫 번째 문자로 포함하십시오 (예 :) [];-\\].
don_crissti

@don_crissti 어때요 [[.^.]-[.-.]]? 이것이 효과가 있다고 생각합니다. 의 ASCII 코드 ^가 이전 이라고 가정합시다 -.
iBug

내 질문에 대한 게으른 해결책이 있습니다. 간단히처럼, 대조 문자에 모든 특수를 얻을[^[.].][.-.]/\^:]
iBug

7

이상하게도 특정 장소에 몇 명의 캐릭터가 있어야합니다. 당신은 있어야합니다 ]세트에서 첫 번째 문자로, 그리고 -세트의 마지막 문자 여야합니다.

요구 사항을 충족하는 RE는 다음과 같습니다. [^]\^/-]:

echo 'Hello[world]-[sun] ^^ 4/5 or 3\4' | grep -Eo '[^]\^/-]' | xargs
H e l l o [ w o r l d [ s u n 4 5 o r 3 4

1
정말 이상하지는 않습니다. 모호성을 피해야합니다.
Kevin

1
두 번째 [캐릭터는 거기에 속하지 않습니다. OP는 제외하고 싶지 않습니다.
Scott

@Scott 잘 발견, 감사합니다. 답변이 업데이트되었습니다.
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.