정규표현식 질문
본문
[@sinbi]
이렇게 생긴 녀석을 찾는 패턴이 아래와 같습니다.
preg_replace("/(\[@[^\]]+\])/iUs", ~~
그럼,
@sinbi 처럼 대괄호를 제거한 경우 이 패턴을 찾으려면,
위 표현식을 어떤 식으로 수정해야 하는지?
대괄호가 여러개라 잘 모르겠네용. ^^;
ps.
소괄호안 식 의미 해석도 해주시면 정말 감사하겠습니다. ^^
답변 1
preg_replace("/(\[@[^\]]+\])/iUs", 이것을
preg_replace("/(@[^\]]+)/iUs", 이렇게 하시면 되겠네요.
그리고
(\[@[^\]]+\])
먼저 소괄호는 그 안의 정규식과 매치가 되는 문자열을 구하겠다는거고
\[ 는 [ 이것이 정규식에서 의미있는 메타문자기 때문에 이스케이프 시키기 위해 앞에 \를
붙인겁니다. 뒤에 \] 이것도 마찬가지.
그리고 [^\]]+ 이것은 \가 아닌 문자가 하나 이상 [과 ] 사이에 있어야 한다는 걸 의미합니다.
참고로 정규식에서 [과 ]은 그 사이에 있는 문자 하나를 취한다는거고 밖의 +는 바로 앞 문자가 하나 이상 이어야 한다는 의미
그런데 [과 ] 사이에 예를 들어 [^\]] 이렇게 ^가 맨 앞에 붙게 되면 그 사이에 있는 문자들 외의 문자가 와야 한다는걸 의미합니다.
즉 맨끝에 ]이 오기 때문에 그 사이에는 ] 아닌 문자가 오고 있죠?
그러니 그 문자(]) 외의 문자를 취하기 위해 그렇게 처리한 것입니다.
설명할려니 무지 답답합니다.
구글링 해서 직접 이해하시면 쉽습니다 ㅎㅎ
답변을 작성하시기 전에 로그인 해주세요.