묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
정규표현식에 대한 질문이요(2차 질문)...
2004.08.24 19:10
정규표현식을 공부하다 보니까 생각보다 많이 헷갈리고, 어렵네요.
저만 그런건지, 아니면 다른 분들도 그런건지...ㅡ_ㅡ;a
그럼 질문 드릴께요.
우선 질문내용 중에 있는 정규표현식 테스트에 사용된 코드는...
<?
$rep=ereg_replace($pattern,"@",$str); //$str 은 폼에서 받은 문자열, $pattern은 폼에서 입력한 패턴문자 입니다.
echo nl2br($rep);
?>
<질문1>
a 라는 문자를 a? 와 a* 패턴문자로 찾아서 @문자로 바꾸면(a? , a* 따로 따로 테스트)
@@
와 같이 출력이 되던데요. a 를 엄밀히 따지면, null+a+null 로 구성되어 있는 문자이기 때문에 결과가...
@@@
와 같이 출력되어야 되는 것으로 생각이 되는데, 어떻게 해서
@@
와 같은 결과가 나오는 건가요?
그리고, a* 이나 a? 은 a, aa, aaaaaaa...등의 문자 말고도 null문자도 검색해 낼 수 있는 건가요?
<질문2>
a?b?c? 패턴문자를 조합해 보면...
null
a
ab
ac
abc
b
bc
c
와 같은 조합이 나오는데요.
abcde 문자를 a?b?c? 패턴문자로 찾아서 @문자로 바꾸면 결과가...
@@d@e@
와 같이 출력되던데요. 어떻게해서 이런 결과가 나오는 거죠?
제가 생각한 바로는 a?b?c? 패턴문자가 null과 abc라는 가정하에 abcde 문자열에서 a앞에 null문자를 @로 바꾸고, abc문자를 @로 바꾸고, 각 문자 사이에 null문자를 @로 바꾸어서 위와 같은 결과가 나온 것 같은데....맞나요?
<질문3>
이번에는 도저히 감히 안 잡히는 결과가 나와서 질문을 드리는 건데요.
공백문자+개행문자를 a* 패턴문자로 찾아서 @로 바꾸면
@ @ @ <-- @공백@공백@
@
와 같은 결과가 나오고, .* 패턴문자로 찾아서 @로 바꾸면
@@
로 나오던데요. 어떻게해서 이런 결과가 나오는 건가요?
<질문4>
공백문자 1개를 c* 패턴문자로 찾아 @로 바꾸면, 공백문자 양쪽에 Null이 존재하기 때문에...
@ @ (@과 @사이에 공백문자 1개 존재)
로 바뀌는 것은 이해하겠는데요.
이번에는 공백문자 1개를 c*|[[:space:]] 패턴문자로 찾아 @로 바꾸면 이번에도 공백문자 양쪽에 null문자가 있기 때문에...
@@@
라는 결과가 나올 것이라고 생각했는데,
@@
와 같은 결과가 나오네요. ㅡ_ㅡ;a. 공백문자 양쪽에 null 이 있기 때문에 c*|[[:space:]] 패턴문자로 검사할 경우 공백문자 1개는 ...
null공백문자null
이기 때문에 null은 c* 패턴문자에 의해, 공백문자는 [[:space:]] 패턴문자에 의해서
@@@
로 나와야 정상이 아닌가요?
아직 정규표현식에 대해 확실히 알지 못해 질문이 좀 횡설수설하고 길지만, 모르는 부분을 그냥 넘어가자니 마음이 찜찜해서 도저히 그냥 넘어가지 못 하겠더라구요. ㅡ_ㅡ;;
모르는 사람의 마음을 깊이 헤아리셔서 부디 좋은 답변 부탁드려요(__)
저만 그런건지, 아니면 다른 분들도 그런건지...ㅡ_ㅡ;a
그럼 질문 드릴께요.
우선 질문내용 중에 있는 정규표현식 테스트에 사용된 코드는...
<?
$rep=ereg_replace($pattern,"@",$str); //$str 은 폼에서 받은 문자열, $pattern은 폼에서 입력한 패턴문자 입니다.
echo nl2br($rep);
?>
<질문1>
a 라는 문자를 a? 와 a* 패턴문자로 찾아서 @문자로 바꾸면(a? , a* 따로 따로 테스트)
@@
와 같이 출력이 되던데요. a 를 엄밀히 따지면, null+a+null 로 구성되어 있는 문자이기 때문에 결과가...
@@@
와 같이 출력되어야 되는 것으로 생각이 되는데, 어떻게 해서
@@
와 같은 결과가 나오는 건가요?
그리고, a* 이나 a? 은 a, aa, aaaaaaa...등의 문자 말고도 null문자도 검색해 낼 수 있는 건가요?
<질문2>
a?b?c? 패턴문자를 조합해 보면...
null
a
ab
ac
abc
b
bc
c
와 같은 조합이 나오는데요.
abcde 문자를 a?b?c? 패턴문자로 찾아서 @문자로 바꾸면 결과가...
@@d@e@
와 같이 출력되던데요. 어떻게해서 이런 결과가 나오는 거죠?
제가 생각한 바로는 a?b?c? 패턴문자가 null과 abc라는 가정하에 abcde 문자열에서 a앞에 null문자를 @로 바꾸고, abc문자를 @로 바꾸고, 각 문자 사이에 null문자를 @로 바꾸어서 위와 같은 결과가 나온 것 같은데....맞나요?
<질문3>
이번에는 도저히 감히 안 잡히는 결과가 나와서 질문을 드리는 건데요.
공백문자+개행문자를 a* 패턴문자로 찾아서 @로 바꾸면
@ @ @ <-- @공백@공백@
@
와 같은 결과가 나오고, .* 패턴문자로 찾아서 @로 바꾸면
@@
로 나오던데요. 어떻게해서 이런 결과가 나오는 건가요?
<질문4>
공백문자 1개를 c* 패턴문자로 찾아 @로 바꾸면, 공백문자 양쪽에 Null이 존재하기 때문에...
@ @ (@과 @사이에 공백문자 1개 존재)
로 바뀌는 것은 이해하겠는데요.
이번에는 공백문자 1개를 c*|[[:space:]] 패턴문자로 찾아 @로 바꾸면 이번에도 공백문자 양쪽에 null문자가 있기 때문에...
@@@
라는 결과가 나올 것이라고 생각했는데,
@@
와 같은 결과가 나오네요. ㅡ_ㅡ;a. 공백문자 양쪽에 null 이 있기 때문에 c*|[[:space:]] 패턴문자로 검사할 경우 공백문자 1개는 ...
null공백문자null
이기 때문에 null은 c* 패턴문자에 의해, 공백문자는 [[:space:]] 패턴문자에 의해서
@@@
로 나와야 정상이 아닌가요?
아직 정규표현식에 대해 확실히 알지 못해 질문이 좀 횡설수설하고 길지만, 모르는 부분을 그냥 넘어가자니 마음이 찜찜해서 도저히 그냥 넘어가지 못 하겠더라구요. ㅡ_ㅡ;;
모르는 사람의 마음을 깊이 헤아리셔서 부디 좋은 답변 부탁드려요(__)