문제) 다음의 코드에서 주석만 얻으세요.
$str = "
function doSpellCheck(form, field) {
/* Make sure not empty * /
if (field.value == '') {
return false;
}
/ * Init * / var y = 2;
var winfowName = 'spellWindow';
var spellCheckURL = 'spell.cfm?formname=comment&fieldname='+field.name;
...
var x = 1; /* i Like
function doSpellCheck(form, field) {
/* Make sure not empty * /
if (field.value == '') {
return false;
}
/ * Init * / var y = 2;
var winfowName = 'spellWindow';
var spellCheckURL = 'spell.cfm?formname=comment&fieldname='+field.name;
...
var x = 1; /* i Like
x */
return false;
}
";
return false;
}
";
/* */ 주석문 안의 문자열만 가지고 오는 정규표현식을 알려주세요.
결과)
Make sure not empty
Init
i LIke x
Init
i LIke x
또는
i Like
x
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 27개
function doSpellCheck(form, field) {
/* Make sure not empty * /
if (field.value == '') {
return false;
}
/ * Init * / var y = 2;
var winfowName = 'spellWindow';
var spellCheckURL = 'spell.cfm?formname=comment&fieldname='+field.name;
...
var x = 1; /* i Like
x */
return false;
}
";
preg_match_all("`/\s*\*(.+)\*\s*/`sU", $str, $m);
print_r($m);
(
[0] => Array
(
[0] => /* Make sure not empty * /
[1] => / * Init * /
[2] => /* i Like
x */
)
[1] => Array
(
[0] => Make sure not empty
[1] => Init
[2] => i Like
x
)
)
preg_match_all("#/\s*\*(.+?)\*\s*/#s", $str, $m);
print_r($m);
Array
(
[0] => Array
(
[0] => /* Make sure not empty * /
[1] => / * Init * /
[2] => /* i Like
x */
)
[1] => Array
(
[0] => Make sure not empty
[1] => Init
[2] => i Like
x
)
)
? 는 바로 앞의 문자가 한개 있거나 없거나 이런뜻인데
.* 와 붙여서는 의미가 없는거 같아요
* 자체가 없거나 있거나
관리자님처럼 햇을 경우
$str = "
function doSpellCheck(form, field) {
/* Make sure not empty * / dd /* ddd*/
if (field.value == '') {
return false;
}
/ * Init * / var y = 2;
var winfowName = 'spellWindow';
var spellCheckURL = 'spell.cfm?formname=comment&fieldname='+field.name;
...
var x = 1; /* i Like
x */
return false;
}
";
이런경우 원하는 답이 안나와요
그래도 참고 삼아 코멘트는 놔두게습니다.
+? 게으른 수량자
입니다.
U 패턴 변경자와 같은 역할을 하는것 같습니다.
그러네요.
한개 배웟습니다.
근데 에디트플러스로 치환작업할 때 게으른수량자가 동작을 안하더라구요.
이걸 좀 써봐야 하는데
? 이렇게 시작하는거......
이건 아직 쓸일이 없어 공부하지 않았습니다.
예제 있음 좀 알려주세요.
http://kr.php.net/manual/en/regexp.reference.subpatterns.php
실제 어느 상황에서 사용해야 하는지는 잘 생각이 안나더라구요.
근데 문제라고 생각하면
그래서 임시로 ... ㅠㅠ
print_r($matches);
이미 문제의 답이 나왔으므로 전 주석만 출력 ㅠㅠ
후방(?<=)에 /* 이 문자열이 있고
전방(?=)에 */ 이 문자열이 있는
(.*?) 을 찾는 것 같습니다.
(?=\*/) 의 의미가 뭐에요?
(?<=) 와 (?=)는 패턴결과물에서 출력되지 않으며
(?<=) 는 패턴뒤를 보고 (?=) 는 패턴 앞을 본다는데
예제를 만들 수 없네요. 그냥 외우고 있어서..
(?<=) 는 후방탐색(lookbehind)
(?=) 는 전방탐색(lookahead) 라고 부른답니다.
저도 다 이해는 못했어요...
개발자 님과 동 시대에 산다는게 영광입니다.