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]
私見
使用についてexplode
:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
利点:
$result[1]
は戻りSome Dude
ます)。1つの方法は次のとおりです。
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
By
が、2番目のパラメーターの任意の文字で分割されます。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",",");
?>
オースティンの答えはあなたの例の場合に有効です。
より一般的には、分割する部分文字列が文字列間で異なる可能性がある場合は、正規表現関数を調べることをお勧めします。
$ variable = preg_replace( '/ By。* /'、 ''、$ variable);
preg_replace
1つの方法を提供します。
$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を使用してください。あなたが考える場合によっては複数回存在し、最後に出現した後にカットすべて、使用したい場合がありますのstrrpos。
以下は効率の悪い方法ですが、必要なコードスペースが少なくなります。この方法はさらに柔軟性が高く、任意の正規表現を実行できます。
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
たとえば、1日の後にすべてを削除したい場合は、次のようにします。
$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
}
正規表現は最初は混乱するように思えるかもしれませんが、習得すれば非常に強力で親友になる可能性があります。幸運を!
なぜ...
これはほとんどの人のニーズにとってはやり過ぎかもしれませんが、上記の個々の回答では対応できない多くのことに対処します。それが扱う項目のうち、そのうちの3つは私のニーズに必要でした。きちんと括弧で囲んでコメントを削除しても、これはまだわずか13行のコードで読みやすいままです。
これにより、次の問題が解決されます。
使用法:
元の文字列を送信し、文字または文字列を検索します。「R」/「L」で右側または左側から開始します。大文字と小文字を区別する場合はtrue / falseです。たとえば、「ここ」で大文字と小文字を区別せず、文字列で右側から検索します。
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
出力は「Now Here Are Some Words」になります。「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
}
}