PHP에서 두 문자열 사이에서 부분 문자열을 얻는 방법은 무엇입니까?
PHPPHP에서 두 문자열 사이에서 부분 문자열을 얻는 방법은 무엇입니까?
두 단어 (또는 두 문자) 사이의 하위 문자열을 반환하는 함수가 필요합니다. 나는 그것을 달성 PHP 함수가 있는지 궁금하네요. 나는 정규식에 대해서 생각하고 싶지 않다. (글쎄, 나는 할 수 있지만 실제로가는 것이 가장 좋은 방법이라고 생각하지 않는다.) strpos 및 substr 함수를 생각합니다. 다음은 그 예입니다.
$string = "foo I wanna a cake foo";
우리는 함수를 호출합니다 : $ substring = getInnerSubstring ($ string, "foo"); 그것은 "나는 떡을 원한다."
미리 감사드립니다.
최신 정보: 글쎄, 지금까지, 나는 단지 하나의 문자열에서 두 단어의 하위 문자열을 얻을 수있다. 조금 더 멀리 가게하고 getInnerSubstring ($ str, $ delim)을 사용하여 문자열을 가져올 수 있는지 물어 보자. delim value 사이의 값, 예 :
$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero foo";
{ "PHP가 마음에 들어요", "나는 ASP가 마음에 들어요.", "나는 영웅이된다"}와 같은 배열을 얻습니다.
해결법
-
==============================
1.문자열이 다르면 (예 : [foo] & [/ foo]) 저스틴 쿡 (Justin Cook)의이 게시물을 살펴보십시오. 아래 코드를 복사합니다.
문자열이 다르면 (예 : [foo] & [/ foo]) 저스틴 쿡 (Justin Cook)의이 게시물을 살펴보십시오. 아래 코드를 복사합니다.
function get_string_between($string, $start, $end){ $string = ' ' . $string; $ini = strpos($string, $start); if ($ini == 0) return ''; $ini += strlen($start); $len = strpos($string, $end, $ini) - $ini; return substr($string, $ini, $len); } $fullstring = 'this is my [tag]dog[/tag]'; $parsed = get_string_between($fullstring, '[tag]', '[/tag]'); echo $parsed; // (result = dog)
-
==============================
2.정규 표현식을 사용하는 방법은 다음과 같습니다.
정규 표현식을 사용하는 방법은 다음과 같습니다.
$str = 'before-str-after'; if (preg_match('/before-(.*?)-after/', $str, $match) == 1) { echo $match[1]; }
onlinePhp
-
==============================
3.
function getBetween($string, $start = "", $end = ""){ if (strpos($string, $start)) { // required if $start not exist in $string $startCharCount = strpos($string, $start) + strlen($start); $firstSubStr = substr($string, $startCharCount, strlen($string)); $endCharCount = strpos($firstSubStr, $end); if ($endCharCount == 0) { $endCharCount = strlen($firstSubStr); } return substr($firstSubStr, 0, $endCharCount); } else { return ''; } }
샘플 사용 :
echo getBetween("a","c","abc"); // returns: 'b' echo getBetween("h","o","hello"); // returns: 'ell' echo getBetween("a","r","World"); // returns: ''
-
==============================
4.
function getInnerSubstring($string,$delim){ // "foo a foo" becomes: array(""," a ","") $string = explode($delim, $string, 3); // also, we only need 2 items at most // we check whether the 2nd is set and return it, otherwise we return an empty string return isset($string[1]) ? $string[1] : ''; }
사용 예 :
var_dump(getInnerSubstring('foo Hello world foo','foo')); // prints: string(13) " Hello world "
주변 공백을 제거하려면 트림을 사용하십시오. 예:
var_dump(trim(getInnerSubstring('foo Hello world foo','foo'))); // prints: string(11) "Hello world"
-
==============================
5.
function getInbetweenStrings($start, $end, $str){ $matches = array(); $regex = "/$start([a-zA-Z0-9_]*)$end/"; preg_match_all($regex, $str, $matches); return $matches[1]; }
$str = "C://@@ad_custom_attr1@@/@@upn@@/@@samaccountname@@"; $str_arr = getInbetweenStrings('@@', '@@', $str); print_r($str_arr);
-
==============================
6.구분 기호로 foo를 사용하고 있다면 explode ()를보십시오.
구분 기호로 foo를 사용하고 있다면 explode ()를보십시오.
-
==============================
7.나는 정규 표현식 솔루션을 좋아하지만 다른 어떤 것도 나에게 어울리지 않는다.
나는 정규 표현식 솔루션을 좋아하지만 다른 어떤 것도 나에게 어울리지 않는다.
1 개의 결과 만있을 것이라는 것을 안다면 다음을 사용할 수 있습니다 :
$between = preg_replace('/(.*)BEFORE(.*)AFTER(.*)/sm', '\2', $string);
BEFORE와 AFTER를 원하는 구분 기호로 변경하십시오.
또한이 함수는 아무 것도 일치하지 않을 경우 전체 문자열을 반환합니다.
이 솔루션은 멀티 라인이지만 필요에 따라 수정자를 사용할 수 있습니다.
-
==============================
8.
<?php function getBetween($content,$start,$end){ $r = explode($start, $content); if (isset($r[1])){ $r = explode($end, $r[1]); return $r[0]; } return ''; } ?>
예:
<?php $content = "Try to find the guy in the middle with this function!"; $start = "Try to find "; $end = " with this function!"; $output = getBetween($content,$start,$end); echo $output; ?>
이것은 "중간에있는 사람"을 반환합니다.
-
==============================
9.strstr PHP 함수를 두 번 사용하십시오.
strstr PHP 함수를 두 번 사용하십시오.
$value = "This is a great day to be alive"; $value = strstr($value, "is"); //gets all text from needle on $value = strstr($value, "be", true); //gets all text before needle echo $value;
출력 : "좋은 하루"
-
==============================
10.단일 문자열에서 여러 번 반복되고 [시작] 및 [끝] 패턴이 서로 다른 경우. 다음은 배열을 출력하는 함수입니다.
단일 문자열에서 여러 번 반복되고 [시작] 및 [끝] 패턴이 서로 다른 경우. 다음은 배열을 출력하는 함수입니다.
function get_string_between($string, $start, $end){ $split_string = explode($end,$string); foreach($split_string as $data) { $str_pos = strpos($data,$start); $last_pos = strlen($data); $capture_len = $last_pos - $str_pos; $return[] = substr($data,$str_pos+1,$capture_len); } return $return; }
-
==============================
11.여기에 함수가있다.
여기에 함수가있다.
function getInnerSubstring($string, $boundstring, $trimit=false) { $res = false; $bstart = strpos($string, $boundstring); if ($bstart >= 0) { $bend = strrpos($string, $boundstring); if ($bend >= 0 && $bend > $bstart) $res = substr($string, $bstart+strlen($boundstring), $bend-$bstart-strlen($boundstring)); } return $trimit ? trim($res) : $res; }
그것 같이 사용하십시오
$string = "foo I wanna a cake foo"; $substring = getInnerSubstring($string, "foo"); echo $substring;
출력 (앞에 공백이 있고 공백이있는 경우 문자열을 반환합니다)
결과 사용 기능을 정리하고 싶다면
$substring = getInnerSubstring($string, "foo", true);
결과 :이 함수는 $ string에 $ boundstring이 없거나 $ string에 $ boundstring이 한 번만 존재하면 false를 반환하고, 그렇지 않으면 $ string에 $ boundstring의 첫 번째 항목과 마지막 항목 사이에 부분 문자열을 반환합니다.
참고 문헌
-
==============================
12.용도:
용도:
<?php $str = "...server daemon started with pid=6849 (parent=6848)."; $from = "pid="; $to = "("; echo getStringBetween($str,$from,$to); function getStringBetween($str,$from,$to) { $sub = substr($str, strpos($str,$from)+strlen($from),strlen($str)); return substr($sub,0,strpos($sub,$to)); } ?>
-
==============================
13.GarciaWebDev와 Henry Wang의 약간 개선 된 코드. empty $ start 또는 $ end가 주어지면, 함수는 $ 문자열의 처음부터 끝까지 값을 반환합니다. 검색 결과 포함 여부에 관계없이 포괄 옵션도 사용할 수 있습니다.
GarciaWebDev와 Henry Wang의 약간 개선 된 코드. empty $ start 또는 $ end가 주어지면, 함수는 $ 문자열의 처음부터 끝까지 값을 반환합니다. 검색 결과 포함 여부에 관계없이 포괄 옵션도 사용할 수 있습니다.
function get_string_between ($string, $start, $end, $inclusive = false){ $string = " ".$string; if ($start == "") { $ini = 0; } else { $ini = strpos($string, $start); } if ($end == "") { $len = strlen($string); } else { $len = strpos($string, $end, $ini) - $ini;} if (!$inclusive) { $ini += strlen($start); } else { $len += strlen($end); } return substr($string, $ini, $len); }
-
==============================
14.Julius Tilvikas의 게시물에 뭔가를 추가해야합니다. 나는 그의 기사에서 설명한 것과 같은 해결책을 찾았다. 그러나 나는 실수가 있다고 생각한다. 나는 두 개의 문자열 사이에 문자열을 얻지 못한다. 왜냐하면 나는 시작 문자열의 길이를 빼야하기 때문에이 솔루션으로 더 많은 것을 얻는다. 이렇게하면 두 문자열 사이에 String을 실제로 가져옵니다.
Julius Tilvikas의 게시물에 뭔가를 추가해야합니다. 나는 그의 기사에서 설명한 것과 같은 해결책을 찾았다. 그러나 나는 실수가 있다고 생각한다. 나는 두 개의 문자열 사이에 문자열을 얻지 못한다. 왜냐하면 나는 시작 문자열의 길이를 빼야하기 때문에이 솔루션으로 더 많은 것을 얻는다. 이렇게하면 두 문자열 사이에 String을 실제로 가져옵니다.
그의 해결책에 대한 나의 변화는 다음과 같다.
function get_string_between ($string, $start, $end, $inclusive = false){ $string = " ".$string; if ($start == "") { $ini = 0; } else { $ini = strpos($string, $start); } if ($end == "") { $len = strlen($string); } else { $len = strpos($string, $end, $ini) - $ini - strlen($start);} if (!$inclusive) { $ini += strlen($start); } else { $len += strlen($end); } return substr($string, $ini, $len); }
Greetz
에서
-
==============================
15.이것을 시도해보십시오. 저의 연구는 테스트 단어 사이에서 데이터를 가져옵니다.
이것을 시도해보십시오. 저의 연구는 테스트 단어 사이에서 데이터를 가져옵니다.
$str = "Xdata test HD01 test 1data"; $result = explode('test',$str); print_r($result); echo $result[1];
-
==============================
16.PHP의 strpos 스타일에서는 시작 기호 sm 또는 끝 기호 em이 발견되지 않으면 false를 반환합니다.
PHP의 strpos 스타일에서는 시작 기호 sm 또는 끝 기호 em이 발견되지 않으면 false를 반환합니다.
이 결과 (false)는 시작 및 끝 표시 사이에 아무 것도없는 빈 문자열과 다릅니다.
function between( $str, $sm, $em ) { $s = strpos( $str, $sm ); if( $s === false ) return false; $s += strlen( $sm ); $e = strpos( $str, $em, $s ); if( $e === false ) return false; return substr( $str, $s, $e - $s ); }
이 함수는 첫 번째 일치 항목 만 반환합니다.
그것은 명백하지만 기능은 먼저 sm과 em을 찾습니다.
em을 먼저 검색 한 다음 sm을 검색 할 때 문자열을 역방향으로 구문 분석해야하는 경우 원하는 결과 / 동작을 얻을 수 없다는 것을 의미합니다.
-
==============================
17.프로가 아니야. 그러나 나는 최근에이 벽에 너무 마주 쳤다. 그리고 이것은 내가 생각해내는 것이다.
프로가 아니야. 그러나 나는 최근에이 벽에 너무 마주 쳤다. 그리고 이것은 내가 생각해내는 것이다.
function tag_contents($string, $tag_open, $tag_close){ foreach (explode($tag_open, $string) as $key => $value) { if(strpos($value, $tag_close) !== FALSE){ $result[] = substr($value, 0, strpos($value, $tag_close));; } } return $result; } $string = "i love cute animals, like [animal]cat[/animal], [animal]dog[/animal] and [animal]panda[/animal]!!!"; echo "<pre>"; print_r(tag_contents($string , "[animal]" , "[/animal]")); echo "</pre>"; //result Array ( [0] => cat [1] => dog [2] => panda )
-
==============================
18.나는 사용한다
나는 사용한다
if (count(explode("<TAG>", $input))>1){ $content = explode("</TAG>",explode("<TAG>", $input)[1])[0]; }else{ $content = ""; }
원하는 구분 문자를
로 대체하십시오. -
==============================
19.용도:
용도:
function getdatabetween($string, $start, $end){ $sp = strpos($string, $start)+strlen($start); $ep = strpos($string, $end)-strlen($start); $data = trim(substr($string, $sp, $ep)); return trim($data); } $dt = "Find string between two strings in PHP"; echo getdatabetween($dt, 'Find', 'in PHP');
-
==============================
20.여기에 사용 된 get_string_between () 함수에 몇 가지 문제가있었습니다. 그래서 나는 내 버전으로왔다. 어쩌면 그것은 내 경우와 같은 경우에 사람들을 도울 수 있습니다.
여기에 사용 된 get_string_between () 함수에 몇 가지 문제가있었습니다. 그래서 나는 내 버전으로왔다. 어쩌면 그것은 내 경우와 같은 경우에 사람들을 도울 수 있습니다.
protected function string_between($string, $start, $end, $inclusive = false) { $fragments = explode($start, $string, 2); if (isset($fragments[1])) { $fragments = explode($end, $fragments[1], 2); if ($inclusive) { return $start.$fragments[0].$end; } else { return $fragments[0]; } } return false; }
-
==============================
21.이 시간을 썼다면, 다양한 응용 분야에 매우 유용하다는 것을 알게되었습니다.
이 시간을 썼다면, 다양한 응용 분야에 매우 유용하다는 것을 알게되었습니다.
<?php // substr_getbykeys() - Returns everything in a source string that exists between the first occurance of each of the two key substrings // - only returns first match, and can be used in loops to iterate through large datasets // - arg 1 is the first substring to look for // - arg 2 is the second substring to look for // - arg 3 is the source string the search is performed on. // - arg 4 is boolean and allows you to determine if returned result should include the search keys. // - arg 5 is boolean and can be used to determine whether search should be case-sensative or not. // function substr_getbykeys($key1, $key2, $source, $returnkeys, $casematters) { if ($casematters === true) { $start = strpos($source, $key1); $end = strpos($source, $key2); } else { $start = stripos($source, $key1); $end = stripos($source, $key2); } if ($start === false || $end === false) { return false; } if ($start > $end) { $temp = $start; $start = $end; $end = $temp; } if ( $returnkeys === true) { $length = ($end + strlen($key2)) - $start; } else { $start = $start + strlen($key1); $length = $end - $start; } return substr($source, $start, $length); } // substr_delbykeys() - Returns a copy of source string with everything between the first occurance of both key substrings removed // - only returns first match, and can be used in loops to iterate through large datasets // - arg 1 is the first key substring to look for // - arg 2 is the second key substring to look for // - arg 3 is the source string the search is performed on. // - arg 4 is boolean and allows you to determine if returned result should include the search keys. // - arg 5 is boolean and can be used to determine whether search should be case-sensative or not. // function substr_delbykeys($key1, $key2, $source, $returnkeys, $casematters) { if ($casematters === true) { $start = strpos($source, $key1); $end = strpos($source, $key2); } else { $start = stripos($source, $key1); $end = stripos($source, $key2); } if ($start === false || $end === false) { return false; } if ($start > $end) { $temp = $start; $start = $end; $end = $temp; } if ( $returnkeys === true) { $start = $start + strlen($key1); $length = $end - $start; } else { $length = ($end + strlen($key2)) - $start; } return substr_replace($source, '', $start, $length); } ?>
-
==============================
22.일부 오류 잡기. 특히, 제시된 기능의 대부분은 $ end가 존재하도록 요구합니다. 실제로 제 경우에는 옵션이되어야했습니다. $ end는 선택 사항이며, $ start가 전혀 존재하지 않으면 FALSE를 평가합니다 :
일부 오류 잡기. 특히, 제시된 기능의 대부분은 $ end가 존재하도록 요구합니다. 실제로 제 경우에는 옵션이되어야했습니다. $ end는 선택 사항이며, $ start가 전혀 존재하지 않으면 FALSE를 평가합니다 :
function get_string_between( $string, $start, $end ){ $string = " " . $string; $start_ini = strpos( $string, $start ); $end = strpos( $string, $end, $start+1 ); if ($start && $end) { return substr( $string, $start_ini + strlen($start), strlen( $string )-( $start_ini + $end ) ); } elseif ( $start && !$end ) { return substr( $string, $start_ini + strlen($start) ); } else { return FALSE; } }
-
==============================
23.@Alejandro Iglesias 대답의 UTF-8 버전은 비 라틴 문자를 사용할 수 있습니다.
@Alejandro Iglesias 대답의 UTF-8 버전은 비 라틴 문자를 사용할 수 있습니다.
function get_string_between($string, $start, $end){ $string = ' ' . $string; $ini = mb_strpos($string, $start, 0, 'UTF-8'); if ($ini == 0) return ''; $ini += mb_strlen($start, 'UTF-8'); $len = mb_strpos($string, $end, $ini, 'UTF-8') - $ini; return mb_substr($string, $ini, $len, 'UTF-8'); } $fullstring = 'this is my [tag]dog[/tag]'; $parsed = get_string_between($fullstring, '[tag]', '[/tag]'); echo $parsed; // (result = dog)
-
==============================
24.이것은 내가 이것을 위해 사용하고있는 함수입니다. 단일 또는 다중 구분 기호에 대해 하나의 함수에서 두 개의 대답을 결합했습니다.
이것은 내가 이것을 위해 사용하고있는 함수입니다. 단일 또는 다중 구분 기호에 대해 하나의 함수에서 두 개의 대답을 결합했습니다.
function getStringBetweenDelimiters($p_string, $p_from, $p_to, $p_multiple=false){ //checking for valid main string if (strlen($p_string) > 0) { //checking for multiple strings if ($p_multiple) { // getting list of results by end delimiter $result_list = explode($p_to, $p_string); //looping through result list array foreach ( $result_list AS $rlkey => $rlrow) { // getting result start position $result_start_pos = strpos($rlrow, $p_from); // calculating result length $result_len = strlen($rlrow) - $result_start_pos; // return only valid rows if ($result_start_pos > 0) { // cleanying result string + removing $p_from text from result $result[] = substr($rlrow, $result_start_pos + strlen($p_from), $result_len); }// end if } // end foreach // if single string } else { // result start point + removing $p_from text from result $result_start_pos = strpos($p_string, $p_from) + strlen($p_from); // lenght of result string $result_length = strpos($p_string, $p_to, $result_start_pos); // cleaning result string $result = substr($p_string, $result_start_pos+1, $result_length ); } // end if else // if empty main string } else { $result = false; } // end if else return $result; } // end func. get string between
간단한 사용을 위해 (2를 반환) :
$result = getStringBetweenDelimiters(" one two three ", 'one', 'three');
결과 배열에 테이블의 각 행을 가져 오는 경우 :
$result = getStringBetweenDelimiters($table, '<tr>', '</tr>', true);
-
==============================
25.tonyspiro에서 최고의 솔루션을 얻었습니다.
tonyspiro에서 최고의 솔루션을 얻었습니다.
function getBetween($content,$start,$end){ $r = explode($start, $content); if (isset($r[1])){ $r = explode($end, $r[1]); return $r[0]; } return ''; }
-
==============================
26.알레한드로의 대답이 향상되었습니다. $ start 또는 $ end 인수는 비워 둘 수 있으며 문자열의 시작 또는 끝을 사용합니다.
알레한드로의 대답이 향상되었습니다. $ start 또는 $ end 인수는 비워 둘 수 있으며 문자열의 시작 또는 끝을 사용합니다.
echo get_string_between("Hello my name is bob", "my", ""); //output: " name is bob" private function get_string_between($string, $start, $end){ // Get if($start != ''){ //If $start is empty, use start of the string $string = ' ' . $string; $ini = strpos($string, $start); if ($ini == 0) return ''; $ini += strlen($start); } else{ $ini = 0; } if ($end == '') { //If $end is blank, use end of string return substr($string, $ini); } else{ $len = strpos($string, $end, $ini) - $ini; //Work out length of string return substr($string, $ini, $len); } }
-
==============================
27.나는 이것을 수년간 사용해 왔으며 잘 작동한다. 아마 더 효율적으로 만들 수 있지만
나는 이것을 수년간 사용해 왔으며 잘 작동한다. 아마 더 효율적으로 만들 수 있지만
grabstring ( "테스트 문자열", "", "", 0)은 테스트 문자열을 반환합니다. grabstring ( "테스트 문자열", "테스트", "", 0)은 문자열을 반환합니다. grabstring ( "테스트 문자열", "s", "", 5)는 문자열을 반환합니다.
function grabstring($strSource,$strPre,$strPost,$StartAt) { if(@strpos($strSource,$strPre)===FALSE && $strPre!=""){ return(""); } @$Startpoint=strpos($strSource,$strPre,$StartAt)+strlen($strPre); if($strPost == "") { $EndPoint = strlen($strSource); } else { if(strpos($strSource,$strPost,$Startpoint)===FALSE){ $EndPoint= strlen($strSource); } else { $EndPoint = strpos($strSource,$strPost,$Startpoint); } } if($strPre == "") { $Startpoint = 0; } if($EndPoint - $Startpoint < 1) { return ""; } else { return substr($strSource, $Startpoint, $EndPoint - $Startpoint); }
}
-
==============================
28.
function strbtwn($s,$start,$end){ $i = strpos($s,$start); $j = strpos($s,$end,$i); return $i===false||$j===false? false: substr(substr($s,$i,$j-$i),strlen($start)); }
용법:
echo strbtwn($s,"<h2>","</h2>");//<h2>:)</h2> --> :)
-
==============================
29.'/에스'
'/에스'
function getStrBetween($left, $right, $in) { preg_match('/'.$left.'(.*?)'.$right.'/s', $in, $match); return empty($match[1]) ? NULL : $match[1]; }
이 시도 ;)
-
==============================
30.
echo explode('/', explode(')', $string)[0])[1];
'/'를 첫 번째 문자 / 문자열로 바꾸고 ')'를 끝 문자 / 문자열로 대체하십시오. :)
from https://stackoverflow.com/questions/5696412/how-to-get-a-substring-between-two-strings-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
cURL을 사용하여 $ _POST 값 전달 (0) | 2018.09.11 |
---|---|
WAMPServer의 Windows 명령 줄에서 PHP를 실행하는 방법 (0) | 2018.09.11 |
unserialize () [function.unserialize] : 오프셋시 오류 (0) | 2018.09.11 |
PHP에서 XML을 JSON으로 변환 (0) | 2018.09.11 |
PHP를 사용하여 클라이언트 IP 주소 얻기 [duplicate] (0) | 2018.09.11 |