PHPで特定の文字列を抽出する方法

このQ&Aのポイント
  • PHPで特定の文字列を抽出する方法について説明します。
  • WAMP環境で情報サイトを運営しており、ユーザーが別サイトのユーザーIDを入力する必要があります。その入力方法として、特定の文字列を抽出する方法を解説します。
  • 具体的な処理の流れや注意点についても説明します。
回答を見る
  • ベストアンサー

PHPで特定の文字列を抽出する方法

WAMP環境で構築しているある情報サイトを運営しています。 環境はApache/2.2.4 (Win32) PHP/5.4.22です。 私の運営するサイトではユーザーが情報を登録できるようになっているのですが、入力してもらいたい項目の一つに、ある別サイト(以降サイトA)のユーザーIDをいれてもらうのですが、殆どのユーザーはそのIDを記憶していません。 そのサイトAでは、下記のような文字列がユーザーが比較的取りやすい所から取得できるので、今のところユーザーはそこから部分コピー(もしくは手書きメモ)して対応してくれています。 <a href="http://www.hogehoge.net/honya/rara/987654321?">あいうえお</a> 入力してもらいたいユーザーIDというのはこの、987654321の部分になりますが、ユーザーにストレスをあたえないため、全体コピー、ペーストをしてもらえれば、不要な部分はこっちでカットしてテーブルに収めたいとおもっています。(スマホユーザーには、部分コピーはめんどくさいと思うので) 処理として下記のようにすれば良さそう?と考えました。 (1)入力画面 → (2)入力確認画面 → (3)入力完了画面と3ページあるとして、 まず、 <a href="http://www.hogehoge.net/honya/rara/987654321?">あいうえお</a> の情報を(1)で入力してもらい、(2)の入力確認画面に遷移させるときにPOSTで渡し、不要な部分はカットしてからそれを(3)の入力完了ページにPOSTで飛ばしDBにInsertする。 で、そのときの記述方法についてが知識が無くわからないのですが、 最初の<a hrefの部分から最後の</a>まで完全に全体コピペができていない場合を考慮したいと思っています。 たとえば ef="http://www.hogehoge.net/honya/rara/987654321?">あいうえお</a> と頭の部分が一部欠けていたり、 <a href="http://www.hogehoge.net/honya/rara/987654321?">あいうえ のように後ろが欠けていたとしても、987654321の部分だけは完全に抽出したいと思います。 処理としては、 1. (2)の画面でPOSTで入力情報を受け取る 2. "?"がある場合は?以降の文字を全てカット 3. "/"がある場合は/とその前の文字を全てカット 4. できた文字列を(3)の画面にPOSTで渡し 5. DBにInsert こんな感じでいけるかな?と思っていますが、考え方として大丈夫そうでしょうか。 この方法であれば、将来サイトAのユーザーIDの桁数がかわったり、英字が混ざったとしても対応できると考えました。 具体的な記述方法について、未だ解決しておらず、もし可能でしたらサンプルをご教授頂けますと幸いです。 何卒宜しくお願い致します。

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

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

正規表現で抽出します。 //入力した文字列を取得する $文字列 = $_REQUEST["xxx"]; //xxx=入力領域の名前 //未入力時のチェックなど 中略 //正規表現を設定する $正規表現 = "/\\/\\d{9}\\?/"; //数字部分を抽出する(正しくは"/nnnnnnnnn?") preg_match($正規表現,$文字列,$抽出部分); //抽出した文字列の"/"と"?"を除く $抽出部分 = substr($抽出部分,1,9); //SQLの構築 $sql = "INSERT INTO ~ VALUES('" . $抽出部分 . "')"; //SQL実行 以下略 正規表現の意味は以下の通りです。 "/"以降に続く9個の数字とその後の"?" 英数字で任意の長さの正規表現は以下の通り $正規表現 = "/\\/[\\da-zA-Z]+\\?/"; ※任意の文字数なので、substrの第3引数に注意 あるいは正規表現による置換で、英数字以外を 空文字列にする方法もあります。この方が有利 かも知れませんね。 正規表現の構文はググれば見つかります。

buttero
質問者

お礼

度々のアドバイスありがとうございます! 処理の流れがよくわかりました。 自己流でなんとか乗り切る前に、上級者の方がどのように設計するかを参考にしたかったので、とてもありがたいです。 正規表現設定からpreg_match、最後にsubstrで調整 とてもスマートですね。 まだまだ未熟なので、この流れが思いつきませんでした。 説明がなかなかうまくできておらずご面倒お掛けしましたが、内容をくみ取っていただけるところもさすがプロの方ですね。本当にありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

以前同じような質問されていますよね? その時から思っていたのですが何を知りたいのでしょうか? >の情報を(1)で入力してもらい、(2)の入力確認画面に遷移させるときにPOSTで渡し、 >不要な部分はカットしてからそれを(3)の入力完了ページにPOSTで飛ばしDBにInsertする。 いまいち日本語が通じないのですが 命題で言う「入力」というのはどこに入力するのでしょうか? input type="text"で入力欄をつくる?ってことですか POSTで渡すというからにはformになっていてmethodがPOSTになっていて サブミットするということでよいですか? 「不要な部分をカットする」とはユーザーがカットするのですか プログラムがカットするのですか? そもそもPHPで処理するということでよいのでしょうか? 「www.hogehoge.net/honya/rara/987654321?」はどういう状態でうごいているのでしょうか apacheがrewriteして特定のphpファイルに飛ばすということですか? 具体的なソースを例示して、どこがわからないか聞いた方がよいでしょう 今回の質問の意図を理解できる人はかなり稀有だと思いますよ

  • ahoo_ok
  • ベストアンサー率31% (30/95)
回答No.1

正規表現

関連するQ&A

  • MySQLで特定の文字列を抜き出す方法

    WAMP環境で作ったある情報サイトを運営していますが、下記のようなケースはどのように対応すればよいか教えていただけますでしょうか。 私の運営するサイトではユーザーが情報を登録できるようになっているのですが、入力してもらいたい項目の一つに、ある別サイトAのユーザーIDをいれてもらうのですが、殆どのユーザーはそのIDを記憶していません。 そのAのサイトでは、下記のような文字列がユーザーが比較的取りやすい所から取得できるので、今のところユーザーはそこから部分コピー(もしくは手書きメモ)して対応してくれています。 <a href="http://www.hogehoge.net/honya/rara/987654321?">あいうえお</a> 入力してもらいたいユーザーIDというのはこの、987654321の部分になりますが、ユーザーにストレスをあたえないため、全体コピー、ペーストをしてもらえれば、不要な部分はこっちでカットしてテーブルに収めたいとおもっています。(スマホユーザーには、部分コピーはめんどくさいと思うので) SUBSTRINGを使うのかな、とおもいましたが、どのように書き込めば良いのか一度上級者の方に教えて頂きたい次第です。 また、将来このユーザーIDに英字が混じった場合や、桁数が変わった場合の対処についても考え方を教えていただけますと幸いです。 初級者で恐縮ですがよろしくおねがいします。

    • ベストアンサー
    • MySQL
  • PHP 文字列抽出

    はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕  あいaうえおか(23バイト)       ↓(substrにより10バイトを抽出して末尾に…を追加)  あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示し

    • 締切済み
    • PHP
  • PHP 文字列抽出

    はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕  あいaうえおか(23バイト)       ↓(substrにより10バイトを抽出して末尾に…を追加)  あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示しないようにプログラミングをしたいのですが、 どのように組めばよいかわかりません。 非常に初歩的なご質問で恐縮ですがご教授頂けると ありがたく思います。 どうぞよろしくお願い致します。

    • 締切済み
    • PHP
  • エクセルのセル内の文字列から抽出したい

    A列に <a href="http://URL/" target="_blank">サイト名</a> という文字列が1000個くらい入っています。 B列にURL部分のみ、C列にサイト名のみを取り出したくて、 B1に左から9文字を削って =SUBSTITUTE(A1,LEFT(A1,9),"") とか入れてみるのですが、これだとURL部分以降の " target="_blank">サイト名</a> が残ってしまいます。 C1には何を入れたら前後の文字列が削除できてサイト名だけになるのかもわかりません。 URLはセルごとに文字数が違うので、どの関数を使えば一括で B1にURL、C1にサイト名が表示されるようになるかアドバイスをお願いいたします。

  • SED等で文字列を抽出したい

    MacOS X 10.6のターミナルを使って文字列を加工して抽出する方法の質問です。 次のような複数行からなるテキスト(ファイル名を 1.txt とします)があります。 <a href="./hoge/82111.310.12345000.htm" target="_blank"> <a href="./hoge/42403.310.33345025.htm" target="_blank"> <a href="./hoge/22154.310.50873323.htm" target="_blank"> ... このテキスト(1.txt)から、sed(?もっと適切なものがあれば別のものでも)コマンド を用いて 82111.12345000.htm 82401.33345025.htm 82111.50873323.htm ... といった具合に、 hoge/ のあとから始まり htmで終わる文字列から .310を取り除いた文字列を抜き出して ファイル一覧のテキスト(2.txt) に書き出す方法を教えてください。 なお、1.txtの行数は不定で変動し、その行数に応じて2.txtも行数が増えていきます。 また htmのファイル名のところは 5桁のランダムな数字.310.8桁のランダムな数字.htm という規則になっています。(.310 と.htm の部分は固定です) よろしくお願いします。

  • 文字列をつないでハイパーリンクをつくる方法?

    ある製品品種を表す異なる多くの文字列がエクセルの列に並んでおり、その品種の紹介PDFを張り付けているページのアドレスが、 http://www.abc●●.co.jp/shouhin_XXX_post/  (XXXは品種記号)だとします。 今現在このアドレスに行くには、品種記号をひとつずつ手入力する画面があり、いちいちそこに記号を入力する必要があり面倒です。 そこでエクセルの文字列操作でできないかと思い以下のようにやってみました。 A列 アドレスの前半部分 http://www.abc●●.co.jp/shouhin_ を並べる B列 品種記号 をたてに並べる C列 アドレスの後半部分 _post/ を並べる D列 文字列をつなぐ関数 concatenate で例えばA3,B3,C3を連結する ここまでで、一応アドレスの文字列ができますが、ハイパーリンクにはなってくれませんでした。 そこでD列をE列に 値複写し、全てのセルを一つずつダブルクリックしてエンターを繰り返す、編集するふりをすると、ハイパーリンクになってくれした。 最後の操作が煩わしいのでもっと根本的に良い方法があれば教えていただけないでしょうか。 よろしくお願いいたいます。

  • excel 特定の文字列を含むセルの削除または抽出

    現在、私の業務の一環としてあるソフトの稼働率を調査しなければなりません。 そのソフト用の管理システムを使えれば楽なのですが有料(ウン十万円)のため導入できませんでした そこでexcelを用いてログの解析を行い、視覚化しようと考えました。 ところが、不必要な情報が多すぎて削除に手間取っています。 ログは一定の法則にしたがって記録されているので、文字列を指定してその文字列を含むセルのみ一括して削除(または抽出)できるとすごく楽になるのですが、 何か良い方法は無いでしょうか? 例えばA列に時間・ユーザー名・状況の順に書かれていて、 特定のユーザーのみを残すように他の行を削除したいといった感じです 例 (時間)(ユーザーA)(使用開始) (時間)(ユーザーB)(使用開始) (時間)(ユーザーC)(使用開始) (時間)(ユーザーA)(使用終了)     ↓ (時間)(ユーザーA)(使用開始) (時間)(ユーザーA)(使用終了)

  • WebBrowser内の特定の文字列が入ったリンクをクリックしたい

    いつもお世話になっております!! VB2005ユーザーです。 WebBrowser内の特定の文字列が入ったリンクをクリックしたいのですが、どのようにすればよいのでしょうか? WebBrowser.Document.Body.InnerText内の <a href="http://mtblog.ne.jp/next/">続きはこちら</a> 「続きはこちら」といった文字列が入ったリンクをクリックしたいのですが・・・。 稚拙な質問で申し訳ありません。

  • 『入力文字列 + .html』 に飛ぶリンクが作りたい

    スクリプト部分に function aaa(){ var path = prompt("ファイル名を入力:",""); location.href = path + ".html"; } と記述しております。 HTMLに <FORM> <INPUT TYPE=button VALUE="閲覧" onclick="aaa();"> </FORM> のようにフォームで書くと期待通りに動くのですが、 <A HREF="javascript:" onClick="aaa();">閲覧</A> のようにリンク文字で書くと思うように飛びません。 (リンク先へ飛ばず元の画面のまま) 不備があるのでしょうか、それともリンク文字では不可なのでしょうか。 ご存知の方いらっしゃいましたら改善方法をご教授願います。 宜しくお願い致します。

  • パスワードを大文字、小文字で入力したい

     あるサイトに接続するために、そのサイト先指定のユーザーIDとパスワードが送られてきました。ユーザーID入力時はパソコンの入力モードのところが確認出来、自分で今打ち込んでいるIDが目視出来るのですが、パスワード入力を始めるとパソコンの下の方の画面にSSL保護つきと言う鍵のアイコンが現れ、今打ち込んでいるパスワードが大文字か小文字なのかがわかりません。 送られてきたパスワードには確かに大文字の中に小文字も含まれています。念のため打ち込んでみたら、やはりエラーです。3回繰り返すと、このパスワードが使えなくなるとの事で困っています。 SSL保護つき時、パスワードを打ち込んだ際に大文字、小文字で打ち込まれているかどうかの確認方法を教えてください。