테스트 사이트 - 개발 중인 베타 버전입니다

정규표현식 질문 채택완료

sinbi 6년 전 조회 2,016

[@sinbi]

 

이렇게 생긴 녀석을 찾는 패턴이 아래와 같습니다.

 

preg_replace("/(\[@[^\]]+\])/iUs", ~~

 

 

그럼,

@sinbi  처럼 대괄호를 제거한 경우 이 패턴을 찾으려면,

위 표현식을 어떤 식으로 수정해야 하는지?

대괄호가 여러개라 잘 모르겠네용. ^^;

 

ps.

소괄호안 식 의미 해석도 해주시면 정말 감사하겠습니다. ^^

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
6년 전

[@sinbi] 이것이 @sinbi 이것으로 바꿨다면

preg_replace("/(\[@[^\]]+\])/iUs", 이것을

preg_replace("/(@[^\]]+)/iUs", 이렇게 하시면 되겠네요.

 

그리고 

(\[@[^\]]+\])

먼저 소괄호는 그 안의 정규식과 매치가 되는 문자열을 구하겠다는거고

\[ 는 [ 이것이 정규식에서 의미있는 메타문자기 때문에 이스케이프 시키기 위해 앞에 \를

붙인겁니다. 뒤에 \] 이것도 마찬가지.

 

그리고 [^\]]+ 이것은 \가 아닌 문자가 하나 이상 [과 ] 사이에 있어야 한다는 걸 의미합니다.

참고로 정규식에서 [과 ]은 그 사이에 있는 문자 하나를 취한다는거고 밖의 +는 바로 앞 문자가 하나 이상 이어야 한다는 의미

 

그런데 [과 ] 사이에 예를 들어 [^\]] 이렇게 ^가 맨 앞에 붙게 되면 그 사이에 있는 문자들 외의 문자가 와야 한다는걸 의미합니다.

즉 맨끝에 ]이 오기 때문에 그 사이에는 ] 아닌 문자가 오고 있죠?

그러니 그 문자(]) 외의 문자를 취하기 위해 그렇게 처리한 것입니다.

 

설명할려니 무지 답답합니다.

구글링 해서 직접 이해하시면 쉽습니다 ㅎㅎ

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sinbi
6년 전
평정심 님, 사랑합니다.
( ^ ______ ~ ) ===b

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인