コメント

- 2:ゲスト (ぱ)
- 2008/10/16 17:49
こんな感じですかねぇ
$ver = "aabacadaea";
$tmp = strtr($ver, array("a"=>"a,"));
echo preg_replace("/,$/", "", $tmp);
「a」を「a,」に置換し、末尾に「,」があった場合は削除すると。
- 3:ゲスト
- 2008/10/16 18:09
適当に書くとこんな感じ
function converter($str)
{
$pattern = "/[b-z]*a/";
preg_match_all($pattern, $str, $matches[]);
return $matches[0][0];
}
$str = "banana";
print_r(converter($str));
/*
*Array
*(
* [0] => ba
* [1] => na
* [2] => na
*)
*/

- 4:ゲスト (E)
- 2008/10/16 18:33
ぱっと思いついたもの2つ。
1.文字列を一文字ずつ配列に入れて全文字走査(区切り文字が1文字に限る)
function myExplode($separate, $string) {
// str_splitはPHP5以上?
if (function_exists(str_split)) {
$tmpArray = str_split($string);
} else {
$strLen = strlen($string);
for ($ii = 0; $ii < $strLen; $ii++) {
$tmpArray[] = substr($string, $ii, 1);
}
}
$count = count($tmpArray);
for ($ii = 0; $ii < $count; $ii++) {
$tmpString .= $tmpArray[$ii];
// 区切り文字が現れたらreturn用配列に格納し、一時文字列変数をクリア
if ($tmpArray[$ii] == $separate) {
$returnArray[] = $tmpString;
unset($tmpString);
}
}
// あまりがあったら最後に入れる。
if ($tmpString) {
$returnArray[] = $tmpString;
}
return $returnArray;
}
2.区切り文字が現れた位置までを取得していく(区切りが2文字以上でもOK)function myExplode($separate, $string){
$strLen = strlen($separate);
while ($string) {
$pos = strpos($string, $separate);
// 見つかったら頭からその位置までをreturn用配列に格納しそれ以降を再調査
if ($pos !== false) {
$returnArray[] = substr($string, 0, $pos + $strLen);
$string = substr($string, $pos + $strLen);
} else {
// 見つからなかったらそのまま格納
$returnArray[] = $string;
unset($string);
}
}
return $returnArray;
}
ともにマルチバイトは非対応です(多分)正規表現も使えそうだったけど渡す文字&区切り文字によってパターンを変えないといけなそうなのでぱっと浮かびませんでした。。。

- 5:koichi
- 2008/10/17 23:41
こんな時こそPerl互換正規表現でさくっと。
function explodeRemainSep($sep, $str)
{
$sep = preg_quote($sep, '/');
return preg_split("/(?<=$sep)/", $str);
}
print_r(explodeRemainSep('a', 'banana'));
出力:Array
(
[0] => ba
[1] => na
[2] => na
[3] =>
)

- 6:ゲスト (BLUEPIXY)
- 2008/10/17 23:48
$res = Array();#結果格納用配列
$str="banana";
$wk = preg_split('/(a)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
while($wk){
array_push($res, array_shift($wk) . array_shift($wk));
}
print_r ($res);#結果の表示
前へ 1 次へ![]()
コメントする
[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。
[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。







たとえば、
の時とか、どうしたいのですか?