특정 문자를 제외하고 공백이 아닌 문자를 일치시키는 방법은 무엇입니까?


111

Perl에서는 \S공백이 아닌 문자와 일치합니다.

백 슬래시를 제외하고 공백이 아닌 문자를 어떻게 일치시킬 수 \있습니까?

답변:


154

문자 클래스를 사용할 수 있습니다 .

/[^\s\\]/

공백 문자 나 \. 다음은 또 다른 예입니다.

[abc]수단 "일치 a, b또는 c"; [^abc]수단 "를 제외한 모든 문자와 일치 a, b또는 c"을.


언제 ^부정 으로 해석되고 언제 줄 시작으로 해석됩니까? 그런 점에서, 왜이 공백의 숫자로 시작하는 라인을 일치 실 거예요$0~/\s*^\s/
알렉산더 CSKA

1
문자 클래스 외부에서는 "문자열의 시작"(또는 현재 일치 모드에 따라 행)입니다. 문자 클래스 내에서 여는 대괄호 뒤의 첫 번째 문자 인 경우에만 문자 클래스의 내용을 무효화합니다.
Tim Pietzcker

공백의 숫자로 시작하는 다음 매치 라인은 윌 $0~/\s*^\s/흰색 공백이 아닌 모든 문자 다음에
알렉산더 CSKA

1
아마도 /^\s+/-줄의 시작과 하나 이상의 공백 문자가 와야합니다.
Tim Pietzcker

1
@AlexanderCska, 당신은 그것을 알아 냈습니까? 위의 답변은 문자열의 첫 번째 일치 만 반환합니다. 모든 일치 항목을 반환하려면 g수정자를 추가하십시오 . /[^\s\\]/g
Ben Carp

14

미리보기를 사용할 수 있습니다.

/(?=\S)[^\\]/

2
공간이 아니면 앞을 봅니다. 그런 다음 네거티브 클래스는 클래스의 문자를 제외한 모든 것을 허용합니다 (공백이 아님).
Denis de Bernardy

이 솔루션이 마음에 듭니다. "공백을 제외한 모든 비 단어 문자 제공"과 같은 경우에 좋습니다./(?=\S)\W/
jocull

공백이 아닌 문자와 따옴표가 아닌 문자를 일치시켜야하는 상황이있었습니다. 또한 공간을 허용해야했습니다. 예 : THIS IS A TEST, AND AGAIN. 다음은 나를 위해 잘 작동했습니다 (?=\S)[^"]*.
Arvo Bowen 19

받아 들인 대답은 나를 위해 작동하지 않았지만 이것은 작동했습니다. 나는 숭고한 텍스트 정규식 검색에서 이것을 사용하고 있었다
Christian Noel

5

이것은 sed를 사용하여 나를 위해 일했습니다. [ 편집 : 아래의 주석은 sed가 \ s를 지원하지 않음을 지적합니다.]

[^ ]

동안

[^\s] 

하지 않았다

# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg

echo "ghai ghai" | sed "s/[^ g]//g"
g g

3
\s공백 문자 이상을 찾습니다. 여기에는 TAB, 줄 바꿈 캐리지 리턴 등이 포함됩니다 ( 정규식 특징에 따라 다른 개수가 달라짐). Perl의 발명품으로, 원래 POSIX 문자 클래스의 약자 [:space:]이며 sed. 위의 첫 번째 정규식은 s/[^[:space:]g]//g.
Alan Moore

Yup @AlanMoore 작품 : echo "ghai ghai" | sed "s/[^[:space:]g]//g" 수익률 :g g
storm_m2138

1

내 시스템 : CentOS 5

\s컬렉션 외부에서 사용할 수 있지만 [:space:]컬렉션 내부 에서 사용해야 합니다. 사실 나는 [:space:]컬렉션 내부에서만 사용할 수 있습니다 . 그래서 이것을 사용하여 단일 공간을 일치시키기 위해 나는 [[:space:]] 정말로 이상합니다.

echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"

Result: a b cX
  • 내가 일치하는 첫 번째 공간 \s
  • 번갈아 가며 일치하는 두 번째 공간 [[:space:]]
  • "공백없이"와 XI 일치 [^[:space:]]

이 두 가지는 작동하지 않습니다.

a[:space:]b  instead use a\sb or a[[:space:]]b

a[^\s]b      instead use a[^[:space:]]b

1
4.4 sed를 기준으로, 당신이 사용한다는 것을 아직 분명히 사실이다 ([^[:space:]])대신 ([^\s]). 저는 openSUSE Tumbleweed 2018 04 03에 있습니다.
user2394284
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.