두 단어 (또는 두 문자) 사이의 하위 문자열을 반환하는 함수가 필요합니다. 그것을 달성하는 PHP 함수가 있는지 궁금합니다. 정규식에 대해 생각하고 싶지 않습니다 (글쎄, 나는 할 수는 있지만 실제로 가장 좋은 방법이라고 생각하지는 않습니다). 사고 strpos
와 substr
기능. 예를 들면 다음과 같습니다.
$string = "foo I wanna a cake foo";
우리는 함수를 호출한다 $substring = getInnerSubstring($string,"foo");
: “나는 케이크를 원한다”.
미리 감사드립니다.
업데이트 :
지금까지 하나의 문자열로 두 단어로 된 하위 문자열 만 얻을 수 있습니다. 좀 더 멀리 갈 수있게하고 허용 getInnerSubstring($str,$delim)
값 사이에있는 문자열을 얻는 용도를 확장 할 수 있는지 묻고 , 예:
$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero foo";
같은 배열을 얻습니다 {"I like php", "I also like asp", "I feel hero"}
.
답변
문자열이 다른 경우 (예 : [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)
답변
정규 표현식은 다음과 같은 방법입니다.
$str = 'before-str-after';
if (preg_match('/before-(.*?)-after/', $str, $match) == 1) {
echo $match[1];
}
답변
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("abc","a","c"); // returns: 'b'
echo getBetween("hello","h","o"); // returns: 'ell'
echo getBetween("World","a","r"); // returns: ''
답변
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 "
주변 공백을 제거하려면을 사용하십시오 trim
. 예:
var_dump(trim(getInnerSubstring('foo Hello world foo','foo')));
// prints: string(11) "Hello world"
답변
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);
답변
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;
출력 :
"is a great day to"
답변
나는 정규식 솔루션을 좋아하지만 다른 어느 것도 나에게 적합하지 않습니다.
결과가 1 개만 있다는 것을 알고 있다면 다음을 사용할 수 있습니다.
$between = preg_replace('/(.*)BEFORE(.*)AFTER(.*)/sm', '\2', $string);
BEFORE 및 AFTER를 원하는 분리 문자로 변경하십시오.
또한이 함수는 일치하지 않는 경우 전체 문자열을 반환합니다.
이 솔루션은 여러 줄로 구성되어 있지만 필요에 따라 수정자를 사용할 수 있습니다.