YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > PHP
검색
멤버이름    오토
비밀번호 
 

[정규식] 해시태그(#) 뽑아내기

페이지 정보

작성자 MintState 댓글 0건 조회 12,341회 작성일 15-11-12 12:09

본문

[정규식] 해시태그(#) 뽑아내기

해시태그를 뽑아 오는 정규식입니다.
<?php
$data = "가나다 #다라마 ABC #QWE 오오오오오오오오 #MINTSTATE  #ㅊㅊㅊㅊ BBS";
preg_match_all("/\\#([0-9a-zA-Z가-힣]*)/", $data, $hashtags);
print_r($hashtags);
?>


결과




* 추가
https://saikyo4713.blog.me/221023839399
<?php
//본문에서 해시태그 변환
function string_to_hashtag_content($os_type, $string)
{
    try
    {
        if(in_array($os_type, ['A', 'I', 'W']) && $string)
        {
            $result = array();
            $re_all = "/(^|\s)*#(.+?)(?=[\s,#)]|$)/";
            $re = "/[ #\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i";
            preg_match_all($re_all, $string, $matches);
            foreach($matches[0] as $s)
            {
                $str = strip_tags(trim($s));
                $str = substr($str, 1, strlen($str)-1);
                //특수문자 대체
                if(!preg_match($re, $str))
                {
                    $str = string_to_replace($str);
                    if(strlen($str) > 1)
                    {
                        switch($os_type)
                        {
                            case "A" : $result["#" . $str] = "<a href='javascript:alert(\"" . $str . "\")'>#" . $str . "</a>"; break;
                            case "I" : $result["#" . $str] = "<a href='javascript:alert(\"" . $str . "\")'>#" . $str . "</a>"; break;
                            default : break;
                        }
                    }
                }
            }
            return strtr($string, $result) . '';
        } else throw new Exception ('');
    } catch (Exception $e) {
        return $e->getMessage();
    }
}

//본문에서 해시태그 추출 (배열)
function string_to_hashtag_db($string)
{
    try
    {
        if($string)
        {
            $result = array();
            $re_all = "/(^|\s)*#(.+?)(?=[\s,#)]|$)/";
            $re = "/[ #\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i";
            preg_match_all($re_all, $string, $matches);
            foreach($matches[0] as $s)
            {
                $str = strip_tags(trim($s));
                $str = substr($str, 1, strlen($str)-1);
                if(!preg_match($re, $str))
                {
                    $str = string_to_replace($str);
                    if(strlen($str) > 1) $result[] = $str;
                }
            }
            return array_unique($result);
        } else throw new Exception ('');
    } catch (Exception $e) {
        return array();
    }
}

//본문내용 해시태그 변환 (본문 저장용으로 사용가능)
function string_to_hashtag($mode, $string)
{
    $change = array();
    preg_match_all("/(^|\s)*#(.+?)(?=[\s,#)]|$)/", $string, $matches);
    foreach ( $matches[0] as $s )
    {
        $str = strip_tags(trim($s));
        $str = substr($str, 1, strlen($str)-1);
        //특수문자 대체
        if(!preg_match("/[ #\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i", $str))
        {
            $str = string_to_replace($str);
            if(strlen($str) > 1) $change["#" . $str] = "<TAG>#".$str."</TAG>";
        }
    }
    return strtr($string, $change).'';
}

//본문내용 해시태그 표기 (본문 저장용으로 사용가능)
function hashtag_to_string($mode, $string)
{
    $change = array();
    preg_match_all("/<TAG>(.*?)<\/TAG>/", $string, $matches);
    foreach ( $matches[0] as $s )
    {
        $str = strip_tags($s);
        switch($mode)
        {
            case "A" : $change[$str] = "<a href='javascript:alert(\"" . $str . "\")'>" . $str . "</a>"; break;
            case "I" : $change[$str] = "<a href='javascript:alert(\"" . $str . "\")'>" . $str . "</a>"; break;
            case "W" : $change[$str] = "<a href='javascript:alert(\"" . $str . "\")'>" . $str . "</a>"; break;
        }
    }
    return strtr($string, $change).'';
}


function string_to_replace($str) {
	return $str;
}
?>

댓글목록

등록된 댓글이 없습니다.

Total 165건 5 페이지
PHP 목록
번호 제목 글쓴이 조회 날짜
65 MintState 13096 11-03
64 MintState 13056 10-31
63 MintState 13030 11-10
62 MintState 12964 11-10
61 MintState 12959 11-03
60 MintState 12898 10-29
59 MintState 12882 11-10
58 MintState 12863 11-03
57 MintState 12686 11-03
56 MintState 12652 11-10
55 MintState 12650 10-31
54 MintState 12606 10-31
53 MintState 12604 11-03
52 MintState 12587 10-29
51 MintState 12580 11-03
50 MintState 12580 11-10
49 MintState 12539 10-28
48 MintState 12523 11-10
47 MintState 12506 11-03
46 MintState 12494 02-23
45 MintState 12365 11-03
44 MintState 12344 11-17
43 MintState 12343 10-29
열람중 MintState 12342 11-12
41 MintState 12330 11-03
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™