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

배열개수 채택완료

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

preg_match_all('생략', $content, $match);
//print_r($match);

 

이렇게 하니 배열에 잘 담기는데여

다시한번 

preg_match_all("/찾는문자/", $match, $matches2);
//echo "{$matches[0][0]} <br>";
//echo "{$matches[0][1]} <br>";
print_r($matches2[0]);

 

이렇게 하니 못찾습니다. 생각해보니

배열에 담겨서 그런거 같습니다. 

이런때는 어떻게 할 수 있을까요?

찾는문자가 몇개인지 알고 싶습니다.

 

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

답변 4개

채택된 답변
+20 포인트
B
3년 전

결과물 찾고 그 안에서 또 찾는 것이라면 아래처럼 하세요.

</p>

<p>preg_match_all('생략', $content, $match);

foreach ( $match[0] as $str ) {

    preg_match_all("/찾는문자/", $str, $matches2);

    print_r($matches2);

}</p>

<p>

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

답변에 대한 댓글 8개

s
sIr어드민
3년 전
아 감사합니다. 말씀이 필이 확 옵니다. ㅎ
s
sIr어드민
3년 전
Array ( [0] => 번호 ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( [0] => 번호 ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( [0] => 번호 ) Array ( )

예를 들어 이렇게 3개가 나오는데
이걸 숫자로 3이라고 알고 싶습니다.

그래야 표를 뿌릴 수 잇어서요
B
BiHon
3년 전
count($match[0]), count($matches2[0])로 배열의 크기를 구할 필요 없이
간단하게 앞에 변수 추가해주면 됩니다.

$total = preg_match_all('생략', $content, $match); // 처음 일치 개수
foreach ( $match[0] as $str ) {
$cnt = preg_match_all("/찾는문자/", $str, $matches2); // 두 번째 일치 개수
print_r($matches2);
}

+ preg_match_all()
- https://www.php.net/manual/en/function.preg-match-all.php
- http://docs.php.net/manual/kr/function.preg-match-all.php
s
sIr어드민
3년 전
감사합니다. 잘 되거 같습니다. ㅎㅎ
s
sIr어드민
3년 전
total 변수추가하고 total을 어느위치에 넣어야 하는지...
그냥 total만 넣으면 아무 의미가 없지 않나요?
B
BiHon
3년 전
예를 들어 이렇게 3개가 나오는데
이걸 숫자로 3이라고 알고 싶습니다. > 에 대한 답변이었습니다.

첫 번째 패턴이 일치하는 개수,
그 내부에서 두 번째 패턴이 일치하는 개수를 변수에 담았으니
이 값을 가지고 어떻게 이용할지는 질문자 님 몫이죠.


최초의 원본 문자열, 첫 번째 패턴, 두 번째 패턴, 원하는 테이블 형태.
구체적으로 남기면 그에 대한 답변을 얻을 수 있겠죠?
s
sIr어드민
3년 전
첫번째는 알려주신대로 total = preg~
하니 정확히 총갯수가 나오는군요,,,
그다음 다시 돌리는거는 뜻대로 안되는군요, 감사합니다!
B
BiHon
3년 전
그다음 다시 돌리는거는 뜻대로 안되는군요, 감사합니다!
> 예제 문자열, 패턴 남기지 않는 한 스스로 해결해야 하는 부분입니다.

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

B
3년 전

원래의 텍스트 내용(가릴 것 가리고, 필요한 최소 요소만 남기고),

원하는 결과물을 남기면 구할 수 있는 방법이 많겠는데

이런 식으로 남기면 본인이 더 많이 이해하고 풀어가야 합니다.

 

이렇게 남겨봐야 일부만 도움이 되겠죠. 원래의 데이터도 모르고, 원하는 결과물도 모르니까.

아무튼 이만 줄입니다.

</p>

<p><?php</p>

<p>$text = '<div class="a"><ul><li>1-1</li><li>1-2</li></ul></div>

<div class="a"><ul><li>2-1</li><li>2-2</li><li>2-3</li></ul></div>';</p>

<p>$total = preg_match_all('#<div class="a">.+?</div>#', $text, $matches);</p>

<p>echo '<table border="1">';</p>

<p>echo '<tr><td colspan="2">총 ', $total, '개 일치</td></tr>';</p>

<p>foreach ( $matches[0] as $str ) {</p>

<p>    $cnt = preg_match_all('#<li>(.+?)</li>#', $str, $matches2);

    echo '<tr><td rowspan="', $cnt, '">', htmlspecialchars($str, ENT_QUOTES), ' ... ', $cnt, '개 일치</td><td>';

    foreach ( $matches2[1] as $k=>$val ) {

        if ( !$k ) {

            echo $val, '</td></tr>';

        } else {

            echo '<tr><td>', $val, '</td></tr>';

        }

    }

    echo '</tr>';

}</p>

<p>echo '</table>';</p>

<p>

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

답변에 대한 댓글 1개

s
sIr어드민
3년 전
그사이 답변해주신거 보고 이미 알았지만 코드에 전문가 냄새가 물씬 풍깁니다.
지적하신대로 기초가 없고 내가 쓰려는거만 해결하려고 하니 늘 어렵고 발전이 없습니다.
추가 답변은 꼭 보관했다가 언제든 쓸 수 있겠습니다. 소중한 시간 내주셔서 고맙습니다.

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

몇 번 나타나는지 알려면

preg_match_all("/찾는문자/", $content, $matches2);

이렇게 해야 하는 거 아니가요?

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

답변에 대한 댓글 1개

s
sIr어드민
3년 전
비혼님 말씀대로 다시 찾는거라요. 감사합니다.

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

그누위즈

배열을 문자열로 한줄로 만들어보세요

</p>

<p><?php

preg_match_all('생략', $content, $match);

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

<p> </p>

<p>$match = implode('|', $match);

preg_match_all("/찾는문자/", $match, $matches2);

//echo "{$matches[0][0]} 
";

//echo "{$matches[0][1]} 
";

print_r($matches2[0]);

?></p>

<p>

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

답변에 대한 댓글 1개

s
sIr어드민
3년 전
될 거 같았는데 안되네요,ㅜㅜ 왜 안되지...혹시나 해서 지금은 저장되기 전 상태입니다.

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

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

로그인