정확한 표현식을 쓰려고 합니다 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

정확한 표현식을 쓰려고 합니다 정보

정확한 표현식을 쓰려고 합니다

본문

코드를 가져다 사용하다 보니 문제가 좀 생겨서 도움글을 좀 구해봅니다

/adm/ 폴더내 파일의 css와 그외 폴더 파일들에 대한 css를 구분해서 사용하려고 합니다
--------------------------------------------------------------------------------
/public_html/gnuboard4/adm/ 폴더안의 파일들
/public_html/기타폴더(adm 폴더제외) 안의 파일들


일단, 아래처럼 사용을 해봤습니다

------------ 사용예제 ---------------------------------------------------------

<? // 스타일 쉬트 : 관리자화면과 일반화면 구분
if (preg_match("/adm/", $_SERVER[PHP_SELF]))
    echo "<link rel='stylesheet' type='text/css' href='{$g4['path']}/style.css'>";
else
    echo "<link rel='stylesheet' type='text/css' href='{$g4['path']}/style_common.css'>";
?>

-------------------------------------------------------------------------------

위처럼 사용을 했더니, /adm/폴더 뿐만이 아니라 기타 다른 폴더에 있는 파일들중
"adm" 으로 시작되는 파일명에도  /adm/폴더에 적용되는 스타일값이 적용이 되네요

그래서 다시 아래와 같은 코드를 적용 해봤습니다

------------ 사용예제 2 ---------------------------------------------------------

<? // 스타일 쉬트 : 관리자화면과 일반화면 구분
if (preg_match("/\/g4\/gnuboard\/adm\/.*.php$/", $_SERVER[PHP_SELF]))
      echo "<link rel='stylesheet' type='text/css' href='{$g4['path']}/style.css'>";
else
      echo "<link rel='stylesheet' type='text/css' href='{$g4['path']}/style_common.css'>";
?>
-------------------------------------------------------------------------------

그랬더니, 이번에는 adm폴더내의 파일들에 style_common.css에 지정된  배경이 적용되네요..

.........
.........

질문 1) 여러 폴더중에 ...
/public_html/gnuboard4/adm/ 폴더안의 파일들에 대한 css와
/public_html/기타폴더(adm 폴더제외) 안의 파일들에 대한 css 값을 달리 적용하고자 합니다
어떻게 구문을 작성해야 의도한 표현식(구문)이 될까요??


질문2) 위 내용중 '사용예제2'의 표현식중에..
"/\/g4\/gnuboard\/adm\/.*.php$/"        <-----이부분을 어떻게 해석애햐하는지 좀 가르쳐 주십시요

궁금한건 /\ <--- 이 형태가 잘 이해가  안되는군요. -_- ;;

통상 경로를 지칭하는거라면,
"/g4/gnuboard/adm/.*.php/"  <=--- 이렇게 해야하지 않는지요


한수 가르쳐 주시겠습니까?

댓글 전체

if(preg_match("/^\/g4\/gnuboard\/adm\//i", $_SERVER['PHP_SELF']) == true){
} else {
}

이것같은데요?

preg_match

preg_match("//",$match);

형태 입니다.

/로 시작해서 /로 끝납니다.

그래서 //// 이런식으로 오면 머리가 아파져서
/를 escape한다고 하나요?

/는 시작과 끝을 알리는 태그 이므로 그 안에 나오는 / 는 \/ 해서 문자로 인식 시키는 겁니다.

\r\n
\t
\.
\?
마찬가지 입니다.
.*.php 는

.*
뭐가 올지는 몰름. 여러개 나올수도 있고 하나도 안올수도 있음

.
뭔가는 하나 나옴

php
php는 반드시 나옴.

preg_match를 검색해보시면 될듯요.

정규표현식은 .. 머리 아파요. 해도해도 적응이 안돼는 넘.

정규표현식은

php용

javascript 용

linux 용이 있습니다.

다들 비슷합니다. 이기회에 공부한번 해보세요 ^^
정말 환장하게 고맙습니다 ^^ ;; 
말씀하신대로 공부를 한다고 하지만, 나이탓인지 -_- ;;  홀로 아무리 책을 봐도 굳은 머리로는 이해가 잘 되지를 않았는데 ^^;; ...

\r\n
\t
\.
\? ........와 관련한 설명은 이해가 쏙 됩니다. 감사합니다 ^^

------------------------------------------------------------------------------------

일단, 댓글 내용을 참고로 해서 다시 코드를 아래와 같이 짜집기 해보았습니다
- 그누보드의 adm 폴더에만 style.css 값 적용하고 나머지는 style_common.css 적용


<?
if(preg_match("/^\/gnuboard\/adm\//i", $_SERVER['PHP_SELF']) == true){
    echo "<link rel='stylesheet' type='text/css' href='{$g4['path']}/style.css'>";
} else {
    echo "<link rel='stylesheet' type='text/css' href='{$g4['path']}/style_common.css'>";
}
?>


위처럼 하니 css가 먹히긴 합니다 ^^... 근데, 아직 코드에 대한 이해가 .. ㅎ

------------------------------------------------------------------------------------


....적어주신 내용중에...

if(preg_match("/^\/g4\/gnuboard\/adm\//i", $_SERVER['PHP_SELF']) == true){
} else {
}


위에서 3가지 의문....

1) 코드내부의 처음에 ("/^\/ .... 에서  ^  <----- 이거 그럼 무슨 의미인지요?? (키보드 숫자 6번키...shif+6)
  찾아보니... ^ 는 문자열의 시작을 의미한다는 의미라고 해석되어 있는데..
  그럼 gnuboard 가 아니라 /gnuboard라고 처음 인식한다는 뜻???


2) 코드내부의 중간에 \//i", ...에서 i <----가 붙는 이유는 무엇입니까??
    문자열의 시작은 ^ 이고 끝은 $ 이라고 표현식에 되어 있는데
    위 적어주신 내용에는 /i 만 있는데 어떤 의미인지 이해가 좀 ... ^^
    (공부해보라고 하셔서... 한번 검색을 해봤습니다만, ^^  ... 아직 이해가 ㅎ)

....
.... 위 1), 2)의 경우 그냥 처음문자열은 /^  ... 문자열 끝은 /i  이렇게 해석되는건가요?


3) 그리고 preg_match 는 언급해주신 거 처럼 preg_match("//",$match); 의 형태인데
    뒤에 == true 를 항상 붙여줘야 하는지요..보통 안쓰고 구문을 많이 만들었던거 같은데...

추가로 좀 .... 한수 지도 부탁드립니다 ^^ 꾸벅~
preg_match()는

pattern 이라고해야 하나? 뒤에 나오는 문자열의 일정한 패턴을 검사 하는 겁니다.

preg_match("/$pattern/",$string);

^는

문자열의 시작이 ^/gnuboard 여야 한다는 것을 의미합니다.

&는
문자열의 끝이 php$라면 php로 끝나야 한다는 것을 의미합니다.

/$pattern/i

에서 뒤에 붙은 i 는 구분자라고해서
패턴에 일정한 조건을 부여 합니다.

i : case insensitive  대소문자 구별 안함.
m  : multiline  들어온 문자열에 \r\n이 있더라도 검사하라
g : 한번 나왔다고 멈추지 말고 계속해서 검사하라.

그리고 == true 를 붙이는건 제 개인적인 습관입니다. ^^;

어디서 줏어 들은게 if($a==true) 가 if($a != false) 즉 부정을 체킹하는것보단 긍정을 체크하는게 더 빠르다는 거여서.  ==true 해주는게 구문이해 하는데도 더 빠르구요.

특이한 경우는 ===, !== 도 써줘야 해서. 그냥 습관입니다.
전체 95 |RSS
그누4 질문답변 내용 검색

회원로그인

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