정규표현식 질문

정규표현식 질문

QA

정규표현식 질문

본문

[@sinbi]

 

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

 

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

 

 

그럼,

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

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

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

 

ps.

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

 

 

이 질문에 댓글 쓰기 :

답변 1

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

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

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

 

그리고 

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

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

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

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

 

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

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

 

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

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

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

 

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

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

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 1

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT