質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

933閲覧

文字列の置換

nantarutia

総合スコア21

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/11/17 09:26

PHPでstr_replaceを使って置換をしたいのですが、希望通りの置換ができません。。
以下の文字列があったとしまして、
01asp 01 05csp 10 10asp 15bsp

これらを
1 1 5 10 10 15

こういった形に変換したいのですが、いい方法はありませんでしょうか?

■したい事
・先頭にある0だけ除外する。
・末尾にある英字を除外する。

(o* 。_。)o よろしくおねがいします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiyoshiMotoki

2016/11/17 09:46

変換後の数字と数字の間のスペースの数がバラバラですが、これには何か意味や法則があるのですか?
KiyoshiMotoki

2016/11/17 09:54

また、「先頭にある0」、「末尾にある英字」以外のパターンは、どうしたいのですか?例えば "hoge123" や "45hoge67" や "8.9000" など
guest

回答4

0

ベストアンサー

まずこういう時は(きまった文字の変換ではない場合)str_replaceではなく正規表現の置換ができるpreg_replaceを使ったほうがよいです。

preg_replace('/^0|[a-zA-Z]*$/','',$str);

で$strは01aspでも01でも05cspでも10でも10aspでも15bspでも

ようは先頭の0または末尾の英字の連続を空文字に変換

投稿2016/11/17 09:54

hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

仕様があってるかわかりませんが、これでよいのでは?

PHP

1$str="01asp 01 05csp 10 10asp 15bsp 0000123abc"; 2$pattern="/(?<=^|\s)0+|[^0-9\s]/"; 3print preg_replace($pattern,'',$str); 4

以下を削除

  • 先頭もしくは空白文字の後ろにある複数の0
  • 数字と空白文字以外

投稿2016/11/17 10:16

yambejp

総合スコア114883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nantarutia

2016/11/17 10:31

おお、ありがとうございます!参考になります!!
退会済みユーザー

退会済みユーザー

2016/11/17 23:05

これだと末尾でない英字が消えます。  単語の先頭の0か単語の末尾の英字 /\b0+|[a-zA-Z]+\b/ \b 便利ですよ
guest

0

###"01asp 01 05csp 10 10asp 15bsp" というひとつの文字列の場合

php

1<?php 2$srcString = "01asp 01 05csp 10 10asp 15bsp"; 3$resultString = preg_replace('/[^0-9]+/', " ", $srcString); 4$resultString = ltrim(preg_replace('/(^[0]+| [0]+)/', " ", $resultString)); 5echo '"' . $srcString . '"' . " => " . '"' . $resultString . '"' . PHP_EOL;

"01asp 01 05csp 10 10asp 15bsp" => "1 1 5 10 10 15 "

###"01asp","01","05csp","10","10asp","15bsp"と別の文字列の場合

php

1<?php 2$srcStringArray = explode(" ", preg_replace('/ /', " ", $srcString)); 3foreach ($srcStringArray as $val) { 4 $resultString = trim(ltrim(preg_replace('/[^0-9]+/', " ", $val), "0")); 5 echo '"' . $val . '"' . " => " . '"' . $resultString . '"' . PHP_EOL; 6}

"01asp" => "1"
"01" => "1"
"05csp" => "5"
"10" => "10"
"10asp" => "10"
"15bsp" => "15"

まさか "01asp 01 05csp 10 10asp 15bsp" という文字列を"1 1 5 10 10 15"という文字列に変換ということではないですよね?

投稿2016/11/17 09:53

編集2016/11/17 10:04
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2016/11/17 10:03

コードが仕様どおりでなかったので修正しました。
Y.H.

2016/11/17 10:06

処理前の文字列がそれぞればらばらならhiimさんの回答のほうがシンプルでした。
guest

0

spaceで分割(explode)して配列かし
英字を(preg_replace)で削除して
文字数字を数字化(floor)して
配列を文字に結合(implode)すれば
できませんか?

投稿2016/11/17 09:33

編集2016/11/17 09:58
kaji

総合スコア648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問