PHP文字置換についての実装方法

このQ&Aのポイント
  • 連続する「記号、小文字、ハイフン」のうち、「小文字、ハイフン」のみを削除する方法について教えてください。
  • 実装方法をご教示いただけないでしょうか。
  • 現在の実装では、「記号、小文字、ハイフン」全てが削除されてしまいますが、削除したいのは「小文字、ハイフン」のみです。
回答を見る
  • ベストアンサー

php 文字置換について

php 文字置換について 以下のような文字列で、「記号、小文字、ハイフン」が連続する場合の「小文字、ハイフン」を削除したいです。 実装方法をご教示いただけないでしょうか。 aa-a-b 以下のように実装した所、aa-のa-も削除されてしまいます。削除したいのは-a-のa-のみです。 if (preg_match_all("/[,'\-\(\)\[\]\.:\+\/][a-z]+-/", $d, $hit)) { ____foreach ($hit as $h) { ________$l = count($h); ________for ($k=0; $k<$l; $k++) { ____________$p = substr($h[$k], 1); ____________$d = str_replace($p, "", $d); ________} ____} }

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

色んなパターンがあると思いますが、単純にこなそうとすると <?php $data = "ab-c-def-ghi-jk"; $result = preg_replace("/-.*?-/", "-", $data); echo $data . " &gt; " . $result; 結果 ab-c-def-ghi-jk > ab-def-jk ですが、記号かどうか、半角小文字英字かどうかとか、挙動的にも 考慮が必要なことはあるのでしょうか?

UserOKWave
質問者

お礼

ありがとうございました。

関連するQ&A

  • PHPで特定の変数値を取り出す

    PHPの関数で変数に $str="1-a"; と格納されているものがあります。 ”-”ハイフンまでの文字「1」を取り出したい。 ”-”ハイフン以降の文字「a」を取り出したい。 とやりたいのですが いい関数はございませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変換テーブルを使った、文字列置換[JavaScript]

    以下のような、変換テーブルがあるとします。 var ascii = [' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~']; var htmlChar = [' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~']; ブラウザの「ソースを見る」で、ソースを見るとHTMLのフォームのテキスト入力フィールドのvalueに特殊文字コード「'」と表示されているとします。 例;ブラウザの「ソースを見る」で、ソースを見た場合: <input type="text" value="'" /> これを変換テーブルを使って、ブラウザの「ソースを見る」で、ソースを見たときに、特殊文字(' なら '(シングルクォート)に表示させたいのですが、可能でしょうか? 変更後の例;ブラウザの「ソースを見る」で、ソースを見た場合: <input type="text" value="'" />

  • 【PHP】ereg() で文字種判定するときエラーになる

    PHP5使用者です。 ereg() でよくわからないエラーに直面して悩んでおります。 例えば、サンプル文字列が半角数字a~z又は -(ハイフン)のみで構成されているか調べたい場合、以下の方法を試しました。 1)if( ereg("^[\-a-z]+$", $str )){ 2)if( ereg("^[a-z-]+$", $str )){ 3)if( mb_ereg("^[\-a-z]+$", $str )){ 4)if( preg_match("/^[\-a-z]+$/", $str )){ 但し $str はシングルバイト文字です 結果、1)のみエラーになります。-をエスケープしているのになぜでしょうか? 文字コードはShift_JIS、EUC-JP、UTF-8とも試しましたが同じでした。そもそも常にマルチバイト関数を使うべきとか…? 解説していただける方、よろしくお願いいたします。

    • 締切済み
    • PHP
  • ASCII以外のUnicode文字とは?

    「セレクタで使用できる文字について」で質問したのですが、 <a id="あすきー以外のユニコード文字名">日本語のアンカー</a> このように回答していただいたのですが、「ASCII以外のUnicode文字」というのは、日本語という意味なんでしょうか? セレクタに日本語を使用する場合、トラブルを避けるためになるべく使用しない方がいいと回答をいただいたので、セレクタに使用する文字は、全て半角で、大小のアルファベット(「A-Z」「a-z」)、数字(0-9)、「-」(ハイフン)、「_」(アンダースコア)のみ使用するのがベストなんでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • HTML
  • 文字化けしたメールの解読

    受信したメールが文字化けしてしまい読めません・・・ 分かる方、解読お願いします! :!"M%$7$/$J$l$P6/$/$J$k$N$HF1$8$@$H9M$($k$h$&$K!#$9$G$K:L;R$OM%$7$/$J$C$F$$$k$3$H$H;d$O;W$C$F$$$^$9!#4hD%$l:L;R!#%P%$%P%$

  • Googleの検索でハイフンを含む文字列を検索したい場合

    Googleのキーワードでハイフン (-)は接続記号 として処理されフレーズ検索となってしまいます. ハイフンを含んだ文字列だけを検索する方法は ないのでしょうか? たとえば, 「EOS-20D」というハイフンを含んでいる文字列 だけのサイトを表示しようとしても, 「EOS 20D」 が多くヒットしてしまいます. 「"」(ダブルコーテション)で括っても結果は同じ. ハイフンを接続記号ではなく,文字列の一部として 検索する方法はないものでしょうか? よろしくお願いいたします. http://www.google.co.jp/intl/ja/help/refinesearch.html#phrase

  • OCRで文字変換したいのですが。

    Brother 複合機 DCP-595CN 使用。スキャン項目の三段目 OCR:テキストデータ変換で 本の文字を読み取り wordに写しその文字を自由にフォントやサイズを変えたい。  PCは MacBook Air バージョンは Yosemite 10.11 から Hi Sierraの 10.13.8 に変えました。 以下はできてこんなところです! c c r y O w r n e a n a s h a r k k n o w s y o w % ' l t @ e ' b o y r & s @ e d , h a r d l y a b t e t o c r e d i t h i s h e a r i n g , T h e w o m a n n o d d e d , n o t l o o k i n g a t a n g r t h i n g b u t h e r s k i r t . P a u l o ' s b r e a t h e x p l o d e d " B u t t h a t ' s i m p o s s i b l e ! " T h e w o m a n p a u s e d t o r a i s e b l a c k e y e s i . n u r o n d e r , c ' Y o u h a v e n e v e r h e a r d o f m e @ " s h e a s k e d . P a u l o w a s a t a l o s s t o a c c o u n t f o r t h e w o m a n ' s c a s u a l a c c e p t a n c e o f t h e s h a r k ' s p r e s e n c e A l l k n e w s 3 h a r k s w e r e a m e n a c e ! Y e t t h i s o d d o   ※OKWAVEより補足:「ブラザー製品」についての質問です。

  • 正規表現

    お世話になります。正規表現の質問です。 \w に当たる文字とハイフンに合致するが、少なくとも一文字はアルファベット(a-z)またはハイフン(-)が含まれていなければならない(つまり、数字だけの文字列は合致しない) という正規表現はどうあらわせばよいでしょうか。 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 4つのセルの文字列が全て一致するものがいくつあるか求める数式を短くしたい

    A1とA2とD1とD2に 仮に「あ」「い」「5」「E」と数字or文字を入力し, E5とF5とG5とH5  がそれぞれ  A1とA2とD1とD2 に全て一致するか I5とJ5とK5とL5   がそれぞれ  A1とA2とD1とD2 に全て一致するか M5とN5とO5とP5  がそれぞれ  A1とA2とD1とD2 に全て一致するか Q5とR5とS5とT5  がそれぞれ  A1とA2とD1とD2 に全て一致するか を確認し,条件に一致した組数を表示するために以下のような数式で求めていますが,数式を短くすることはできないでしょうか? =SUM(A1&A2&D1&D2=E5&F5&G5&H5,     A1&A2&D1&D2=I5&J5&K5&L5,     A1&A2&D1&D2=M5&N5&O5&P5,     A1&A2&D1&D2=Q5&R5&S5&T5) セルに実際に入る文字は1文字ではないため=CODE()は使用できません。

  • Bシェルで、1文字づつ読み込む方法を教えてください。(バイナリ)

    Bシェルで、1文字づつ読み込む方法を教えてください。(バイナリ) 以前、下記の質問をして、回答を頂きました。 この中の入力ファイル『test.txt』がバイナリ形式だった場合は、 どのようにしたら良いでしょうか。 ### 質問 ############################################ 次のように文字が並んでいて、 A B C D E F G H I J K L M N O P それぞれの番地と共に、上記の文字を出力する場合、 どのようにしたら宜しいでしょうか。 入力ファイル:test.txt A B C D E F G H I J K L M N O P ↓ 1 2 3 4 1 A B C D 2 E F G H 3 I J K L 4 M N O P ↓ 出力ファイル A 1 1 B 2 1 C 3 1 D 4 1 E 1 2 F 2 2 G 3 2 H 4 2 I 1 3 J 2 3 K 3 3 L 4 3 M 1 4 N 2 4 O 3 4 P 4 4 ### 回答 ############################################ yy=1 while read line; do xx=1 set -f $line while [ $# -gt 0 ]; do echo $1 $xx $yy shift xx=`expr $xx + 1` done yy=`expr $yy + 1` done < test.txt ##################################################### どうぞ宜しくお願い致します。