PHP에서 특정 하위 문자열 다음에 모든 것을 제거하는 방법이 궁금합니다.
전의:
Posted On April 6th By Some Dude
하위 문자열 "By"를 포함하여 그 이후의 모든 텍스트를 제거하도록하고 싶습니다.
감사
PHP에서 특정 하위 문자열 다음에 모든 것을 제거하는 방법이 궁금합니다.
전의:
Posted On April 6th By Some Dude
하위 문자열 "By"를 포함하여 그 이후의 모든 텍스트를 제거하도록하고 싶습니다.
감사
답변:
$variable = substr($variable, 0, strpos($variable, "By"));
평범한 영어로 : 시작 부분에서 시작하여 처음에 델리 미네 이터가있는 위치에서 끝나는 부분을 알려주세요.
PHP 5.3 이상을 사용하는 경우 strstr () 의 $ before_needle 플래그를 살펴보십시오
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
FALSE
문자열의 일부를 찾지 못하면 반환 됩니다. 해결책은 다음과 같습니다.echo strstr($s, 'By', true) ?: $s;
explode(' By', $s)[0]
IMHO 일 것입니다.
사용 방법 explode
:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
장점 :
$result[1]
반환 Some Dude
).한 가지 방법은 다음과 같습니다.
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
By
두 번째 매개 변수의 모든 문자로 나뉩니다 . 즉, B
또는로 분할됩니다 y
. 기술적으로, 전에 모든 것을 얻지는 못합니다 By
.
strtok('a:b', ':')
반환 a
하지만 strtok(':b', ':')
반환 b
합니다.
이 시도.
function strip_after_string($str,$char)
{
$pos=strpos($str,$char);
if ($pos!==false)
{
//$char was found, so return everything up to it.
return substr($str,0,$pos);
}
else
{
//this will return the original string if $char is not found. if you wish to return a blank string when not found, just change $str to ''
return $str;
}
}
용법:
<?php
//returns Apples
$clean_string= strip_after_string ("Apples, Oranges, Banannas",",");
?>
Austin의 답변은 귀하의 사례에 적합합니다.
더 일반적으로 분할하는 하위 문자열이 문자열마다 다를 수있는 경우 정규식 함수 를 살펴 보는 것이 좋습니다.
$ variable = preg_replace ( '/ By. * /', '', $ variable);
preg_replace
한 가지 방법을 제공합니다.
$newText = preg_replace('/\bBy.*$/', '', $text);
다음은 문자열에서 첫 번째 By 이후의 모든 항목을 잘라내는 가장 효율적인 방법 (런타임 별) 입니다. 경우 에 의해이 존재하지 않는, 전체 문자열이 반환됩니다. 결과는 $ sResult입니다.
$sInputString = "Posted On April 6th By Some Dude";
$sControl = "By";
//Get Position Of 'By'
$iPosition = strpos($sInputString, " ".$sControl);
if ($iPosition !== false)
//Cut Off If String Exists
$sResult = substr($sInputString, 0, $iPosition);
else
//Deal With String Not Found
$sResult = $sInputString;
//$sResult = "Posted On April 6th"
대소 문자를 구분하지 않으려면 strpos 대신 stripos 를 사용 하십시오. By 가 두 번 이상 존재할 수 있다고 생각 하고 마지막 발생 후 모든 것을 잘라내려면 strrpos를 사용하십시오 .
아래는 덜 효율적인 방법이지만 코드 공간을 덜 차지합니다. 이 방법은 더욱 유연하며 정규 표현식을 수행 할 수 있습니다.
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
예를 들어, 하루 후에 모든 것을 제거하려면 다음을 수행하십시오.
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "[0-9]{1,2}[a-z]{2}"; //1 or 2 numbers followed by 2 lowercase letters.
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April"
대소 문자를 구분하지 않으려면 다음과 같이 i 수정자를 추가하십시오.
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
마지막 을 지나 모든 것을 얻으려면 둘 이상이 있다고 생각되면 처음에 다음과 같이. *를 추가하십시오.
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
그러나 preg_match를 사용하여 수행하려는 작업을 수행 할 수있는 강력한 방법도 있습니다.
$sInputString = "Posted On April 6th By Some Dude";
$pPattern = "'Posted On (.*?) By (.*?)'s";
if (preg_match($pPattern, $sInputString, $aMatch)) {
//Deal With Match
//$aMatch[1] = "April 6th"
//$aMatch[2] = "Some Dude"
} else {
//No Match Found
}
정규 표현식은 처음에는 혼란스러워 보일 수 있지만 일단 마스터하면 가장 강력하고 친한 친구가 될 수 있습니다! 행운을 빕니다!
왜...
이것은 대부분의 사람들의 요구에 과잉 일 수 있지만, 위의 각 개인이 대답하지 않은 많은 것들을 다룹니다. 그것이 다루는 항목들 중 세 가지가 내 필요에 필요했습니다. 괄호를 묶고 주석을 삭제하면 여전히 13 줄의 코드로 읽을 수 있습니다.
이것은 다음을 해결합니다.
용법:
원본 문자열, 검색 문자 / 문자열, "R"/ "L"을 시작하여 오른쪽 또는 왼쪽에서 시작하고 대 / 소문자 구분을 위해 true / false를 보냅니다. 예를 들어, 문자열에서 "여기"대소 문자를 구분하지 않고 오른쪽에서 시작하십시오.
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
결과는 "이제 몇 단어들"입니다. "R"을 "L"로 변경하면 "Now"가 출력됩니다.
기능은 다음과 같습니다.
function TruncStringAfterString($origString,$truncChar,$startSide,$caseSensitive)
{
if ($caseSensitive==true && strstr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strrpos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return strstr($origString,$truncChar,true);
}
}
elseif ($caseSensitive==false && stristr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strripos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return stristr($origString,$truncChar,true);
}
}
else
{ // NOT found - return origString untouched
return $origString; // Nothing to do here
}
}