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

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

QA

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

본문

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

 

 

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

  echo "학생수 {$stuCnt}";

 

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

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

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


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

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

이 질문에 댓글 쓰기 :

답변 4

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

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

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

 


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

 

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

 

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

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

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

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

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

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

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

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

 


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

<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>
<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>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=&scene_type=&B6%A6%C0%CD%B1%A3%D3%C3%C6%B7">...</a></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>

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

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

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

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


$stuCnt = preg_match_all('#<p>학생.*<\/p>#u', $content, $student);
echo '학생수 : ', $stuCnt, '<br>';
print_r($student);
답변을 작성하시기 전에 로그인 해주세요.
전체 123,665 | RSS
QA 내용 검색

회원로그인

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