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

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

 

 

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

  echo "학생수 {$stuCnt}";

 

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

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

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

Copy
<p>학생이름:&nbsp;홍길동</p>

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

답변 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

 

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

 

echo $student[0][0];

echo $student[0][1];

 

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

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

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

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

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

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

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

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

print_r($student);
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

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

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

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

my.value.split("<p>학생") 로 배열을 만들고

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

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

 

Copy
<textarea id=my>
<p><br />


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

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

<table cellspacing="0">
    <tbody>
        <tr>
            <td style="text-align:center; vertical-align:top; width:30px">&nbsp;</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>53.20</p>

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

                    </tr>
                </tbody>
            </table>
            </td>
            <td style="text-align:center; vertical-align:top; width:108px">
            <p>600</p>


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

<p>학생이름:&nbsp;춘향이</p>

<table cellspacing="0">
    <tbody>
        <tr>
            <td style="text-align:center; vertical-align:top; width:30px">&nbsp;</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>
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

아 그렇군요, 알기 쉬운 설명까지 감사합니다.!!

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

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

 

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

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

답변에 대한 댓글 1개

아 그렇군요,,,
https://regexr.com/6dsl0 여기 보시면 이렇게 되어 있습니다.

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

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

로그인
🐛 버그신고