特定のキャラクターの後にすべてを取得するにはどうすればよいですか?


140

文字列があり、特定の値の後のすべてを取得したいと思います。文字列は常に一連の数字で始まり、その後にアンダースコアが続きます。アンダースコアの後の残りの文字列を取得します。したがって、たとえば、次の文字列があり、何を返したいかがわかります。

"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"

このようなことをするにはどうすればよいですか?

回答:


333

strpos()発見は、その後のsubstr以降、そのインデックスプラス1からすべてをグラブ、アンダースコアのオフセット。

$data = "123_String";    
$whatIWant = substr($data, strpos($data, "_") + 1);    
echo $whatIWant;

アンダースコア文字(_)が文字列に存在するかどうかを確認してから取得しようとする場合は、以下を使用できます。

if (($pos = strpos($data, "_")) !== FALSE) { 
    $whatIWant = substr($data, $pos+1); 
}

2
下線が存在するかどうかを確認するのに最適なものは何ですか(オプションなど)。
ジョンマグノリア

2
@JohnMagnolia:その後、そのまま使用できますif (($pos = strpos($data, "_")) !== FALSE) { $whatIWant = substr($data, $pos+1); }
Amal Murali 14

11
@JohnMagnoliaまたは少し派手なワンライナー:substr($data, (strrpos($data, '_') ?: -1) +1)
2015年

2
@fluあなたが言うつもりだったと思う、読みにくい。IMO、行数が少ないからといって洗練されているわけではありません。
MH

針が見つからない場合、この関数は、いくつかのサブストリング/ charまたは虚偽の後の文字列を返します:function StrAfterStr($S, $H) { return (($P = strpos($S, $H)) !== false) ? substr($S, $P + 1) : false; }
Marcodor

14

strtokこの種のものについて見過ごされがちな機能です。それはかなり高速であることを意味します。

$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' ); 

このような空の文字列は、残りの文字列を強制的に返します。

あなたはなるだろう「_」後にすべてでは何もありませんでした場合はNBはFALSEの値$allTheRestに述べたように、ドキュメントは、他のfalsy値と区別するために、===でテストする必要があります。


3
注意してください:strtokは、文字列の部分を返します、それは文字列の最初の文字である場合には、例えば、文字strtok('a_b', '_')が返されますaが、strtok('_b', '_')戻りますb、あなたが期待するように空の文字列ではなく
クインComendant

9

ここに使用する方法は次のexplodeとおりです。

$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string

または:

$text = @end((explode('_', '233718_This_is_a_string', 2)));

でパラメータを指定する2と、文字列区切り文字で区切られた最大2つの要素を持つ配列が返されます。2番目の要素()を返すと、残りの文字列が返されます。limitexplode()[1]


strpos@fluで提案されている)を使用した別のワンライナーは次のとおりです。

$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string

2

文字列の最初の部分を抽出する必要がある場合は、試してみることができます。

クエリ:

$s = "This_is_a_string_233718";

$text = $s."_".substr($s, 0, strrpos($s, "_"));

出力:

This_is_a_string



1
$string = "233718_This_is_a_string";
$withCharacter = strstr($string, '_'); // "_This_is_a_string"
echo substr($withCharacter, 1); // "This_is_a_string"

単一のステートメントではそうなります。

echo substr(strstr("233718_This_is_a_string", '_'), 1); // "This_is_a_string"

0

私はstrrchr()を使用します。たとえば、ファイルの拡張子を見つけるには、次の関数を使用します。

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns ".jpg"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.