테스트 사이트 - 개발 중인 베타 버전입니다

............. 채택완료

sIr어드민 3년 전 조회 1,831

뭔 내용인지 궁금하셨죠? ㅋㅋ

 

 

   preg_match_all("/

학생.*<\/p>/", $content, $student); //---- 학생 추출           $stuCnt = count($student[1]);

  echo "학생수 {$stuCnt}";

 

html에 학생이름이 표시된 갯수를 뽑으려고 이렇게 했는데

정규식사이트에서는 몇개인지 잘 나오는데

왜 나의 코드에서는 값이 안나타나는걸까요? ㅜㅜ

</p>

<p><p>학생이름: 홍길동</p></p>

<p>

이렇습니다.   때문일까요?

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트

정규식 강의를 보시는 것을 추천드립니다.^^

개발자팁에 정규식 강의가 잘 올라와 있습니다.

https://sir.kr/pg_tip?sca=PHP&sfl=wr_subject%7C%7Cwr_content&stx=%EC%A0%95%EA%B7%9C%EC%8B%9D

 

</p>

<p>preg_match_all("/(<(p+)[^>]*>)(학생이름+)(.*?)(<\/\\2>)/", $content, $student);</p>

<p> </p>

<p>echo $student[0][0];</p>

<p>echo $student[0][1];</p>

<p>

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

B
3년 전

- 링크의 HTML 내용. 질문의 정규식 패턴으로 잘 구해집니다.

- 따로 count()하지 않아도 됩니다. $stuCnt = preg_match_all(...);

- Delimiters는 겹치지 않는 문자 사용하면 Escape 처리하지 않아도 되어 편합니다. /<\/p>/#

#

- UTF-8이면 Pattern Modifiers - u 붙여주기 /.../u #...#u

</p>

<p>$stuCnt = preg_match_all('#<p>학생.*<\/p>#u', $content, $student);</p>

<p>echo '학생수 : ', $stuCnt, '
';</p>

<p>print_r($student);</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sIr어드민
3년 전
아 이런 사연이 있어서 제 코드에서는 안되었군요, 고수님들 총출동이시군요, 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

$content 안에는 쌍따옴표가 들어가서는 안 됩니다.

쌍따옴표가 들어가는 문자열은 재주껏 쌍따옴표를 삭제하거나 쌍따옴표 앞에 \ 을 붙여야 합니다.

그냥 저 같으면 자바스크립트로 쉽게...

문자열 전체를 id 를 my 로 준 textarea 안에 넣어 놓고

my.value.split("

학생") 로 배열을 만들고

배열의 length - 1 한 값을 찍어내는 방법을 택할 것 같은데요...

물론 마지막에 값을 추출해 낸 후에는 my.remove() 해서 textarea 를 삭제해 주구요.

 

</p>

<p><textarea id=my>

<p>
</p>

<p>

<p><a href="source=&scene_type=&8%DF%C3%DC%BF%AD%B4%B4%C0%CD%B1%A3%B7%C0%BB%A4"></a></p></p>

<p><p>학생이름: 홍길동</p></p>

<p><table cellspacing="0">

    <tbody>

        <tr>

            <td style="text-align:center; vertical-align:top; width:30px"> </td>

            <td style="text-align:center; vertical-align:top">

            <table cellspacing="0">

                <tbody>

                    <tr>

                        

                        </td>

                        <td style="text-align:center; vertical-align:top; width:100px">

                        <p><img src="./h1LLkHO_!!6000000002705-2-tps-68-24.png" style="height:13px" /></p></p>

<p>                        <p>53.20</p></p>

<p>                        <p>56.00</p>

                        </td>

                        <td style="text-align:center; vertical-align:top; width:60px">

                        <p>1</p>

                        </td></p>

<p>                    </tr>

                </tbody>

            </table>

            </td>

            <td style="text-align:center; vertical-align:top; width:108px">

            <p>600</p></p>

<p>

<p><a href="source=&scene_type=&B6%A6%C0%CD%B1%A3%D3%C3%C6%B7">...</a></p></p>

<p><p>학생이름: 춘향이</p></p>

<p><table cellspacing="0">

    <tbody>

        <tr>

            <td style="text-align:center; vertical-align:top; width:30px"> </td>

            <td style="text-align:center; vertical-align:top">

            <table cellspacing="0">

                <tbody>

                    <tr>

</textarea>

<script>

myCount = my.value.split("<p>학생").length - 1;

document.write(myCount);

my.remove();

</script></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sIr어드민
3년 전
아 그렇군요, 알기 쉬운 설명까지 감사합니다.!!

댓글을 작성하려면 로그인이 필요합니다.

$content 내용을 올려주셔야 정규식이 맞는지 틀리는지 확인을 할수있는데

 

지금 처럼 주시면 답변 달아줄 사람이 아무도 없을꺼예요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sIr어드민
3년 전
아 그렇군요,,,
https://regexr.com/6dsl0 여기 보시면 이렇게 되어 있습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인