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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1081閲覧

PHP ユーザーの入力文字に応じてTRUE FOLSEを表示したい

ty-ty

総合スコア3

PHP

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2021/10/07 01:29

編集2021/10/07 10:39

#正規表現を使用し、ユーザーの入力文字に応じてTRUE FOLSEを表示したい

ユーザーの入力した値を代入した「$input」
テキストファイルから取り出した大量の英文章一行(約300〜500)を代入した「$text」

上記二つを使用し、正規表現をかけ、ユーザーの入力文字$inputに応じてTRUE FOLSEを表示したいです。

php

1 2$textfile = @fopen("XXX.txt", "r"); 3if ($textfile) { 4 while (($text = fgets($textfile, 4096)) !== false) { 5 } 6 if (!feof($textfile)) { 7 echo "Error: unexpected fgets() fail\n"; 8 } 9 fclose($textfile); 10} 11 12 // 標準入力 13 $input= trim(fgets(STDIN)); 14 // 部分一致 15 if (preg_match($input, $text)) { 16 echo "Searching for".$input."in XXX.txt"."\n"; 17 echo "RESULT:TRUE"."\n"; 18 } else { 19 echo "Searching for".$input."in XXX.txt"."\n"; 20 echo "RESULT: FALSE"."\n"; 21 22 } 23 24

現在の状況 

$inputに正規表現をかけることが出来ていない為なのか、text内に記載されている文字をユーザー入力しても
preg_match(): Empty regular expression inと表示されます。

if (preg_match($input, $text))の$inputには正規表現は使用出来ないのでしょうか

その他の正規表現の方法等ございましたら
どなたかご教授いただけませんでしょうか。
宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

preg_matchの使い方を間違えています。preg_match(正規表現, 対象テキスト)です。

また、このコードだと、1行読むごとに$textを上書きしているので、ファイルを読み終えた後は、$textはファイルの最終行が入っていますが、それは期待通りでは無いでしょう。

方針1:
最初に$inputを入力しておき、ファイルを1行読むごとにpreg_matchする。

方針2:
ファイル全体を読んでそれを$textにセットして(file_get_contentsが簡単)、ファイル全体に対してpreg_matchする。

なお、100文字程度は「大量のテキストとは言いません」。

投稿2021/10/07 01:56

otn

総合スコア85901

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

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

ty-ty

2021/10/07 06:06 編集

コメント頂き誠ありがとうございます。 本質文を編集いたしますが、テキストは「1行約300ー500字」になります。 記載漏れをしておりましたので ご確認お願い致します。お手数おかけしまして申し訳ございません。 また、「ファイル内のテキストに正規表現を行い、$text内にユーザーが入力した文字$inputが含まれているか判定する」という動作は、file_get_contentsとやpreg_match等を使用し実行出来ますでしょうか。 ご教授頂ければ幸いです。 お忙しいところ、恐縮ですが宜しくお願い致します。
otn

2021/10/07 07:49

> 「ファイル内のテキストに正規表現を行い、$text内にユーザーが入力した文字$inputが含まれているか判定する」という動作は、file_get_contentsとやpreg_match等を使用し実行出来ますでしょうか。 ファイルサイズがギガバイト単位で無ければこれで。 $text = file_get_contents("XXX.txt"); $input にデリミター付きで正規表現を入力する if (preg_match($input, $text) { ~~~
ty-ty

2021/10/07 09:14

先ほど、preg_match($text, $input)の変数を逆にすることでTRUE、FALSEの処理が出来ました。 また先ほどotn様にご教授頂いたことを参考に、引き続き取り組んで参りたいと思います。 この度は、ご協力頂き誠に有り難うございました。
guest

0

ベストアンサー

ざっと見ておかしいと思った点

PHP

1while (($text = fgets($textfile, 4096)) !== false)

結局$textには最後の4096バイトしか残らないですよね。

PHP

1preg_match($text, $input)

引数が逆では。

PHP: preg_match - Manual

投稿2021/10/07 01:51

itagagaki

総合スコア8402

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

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

ty-ty

2021/10/07 03:12

コメント有り難うございます。 現状では$textをechoするとファイル内の文章が表示されるようになっています。 $text, $inputの引数が逆ということでしょうか ご教授頂ければ幸いです。 お忙しいところ、恐縮ですが宜しくお願い致します。
itagagaki

2021/10/07 03:28

まだわからないのですか?? > 現状では$textをechoするとファイル内の文章が表示されるようになっています。 while でファイル全体のテキストを読み込んだつもりなのでしょうが ループを回るたびに $text にそのとき読み込んだ4096バイト以内のデータを代入しているだけなので 最終的に $text に残るのは最後に読み込んだブロックだけです。 > $text, $inputの引数が逆ということでしょうか 回答に提示した preg_match のリファレンスマニュアルには目を通したのですか? それでもわからないですか?
ty-ty

2021/10/07 09:11 編集

コメント有り難うございます。 テキストに関しては「改行されていない長い文章1行」の為、全文読み込むことが出来ています。 これも適切な返答ではないかも知れませんが申し訳ございません。 pattern 検索するパターンを表す文字列。 subject 入力文字列。 preg_match(string $pattern,string $subject,): int|false とマニュアルに記載があった為、誤った認識で pattern=検索してほしいテキスト$text subject=ユーザーが入力した文字列 $input と記載していました。 正しくは「subjectがpatternを含んでいるか」を返却するので逆という解釈でしょうか。 また、ご教授頂いたことをもとに変数を逆にすると表示がされました。 ご協力いただき誠に有り難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問